1.什么是方法,什么是函数

  1. class Foo:
  2. def chi(self):
  3. print("我是吃")
  4.  
  5. @staticmethod
  6. def static_method():
  7. pass
  8.  
  9. @classmethod
  10. def class_method(cls):
  11. pass
  12.  
  13. f = Foo()
  14. print(f.chi) # <bound method Foo.chi of <__main__.Foo object at 0x10f688550>>
  15. print(Foo.chi) # <function Foo.chi at 0x10e24a488>
    print(Foo.static_method)
    # <function Foo.static_method at 0x10b5fe620>
    print(Foo.class_method)
    # bound method Foo.class_method of <class '__main__.Foo'>>
  16. print(f.static_method) # <function Foo.static_method at 0x10e1c0620>
  17. print(f.class_method) #<bound method Foo.class_method of <class '__main__.Foo'>>
  18.  
  19.         仔细观察, 我们能得到以下结论:
              1. 类⽅方法. 不论任何情况, 都是⽅方法.
                2. 静态⽅方法, 不论任何情况. 都是函数
               3. 实例例⽅方法, 如果是实例例访问. 就是⽅方法. 如果是类名访问就是函数.
  20.  

2,从程序的角度上也是可以判断的

  1. from types import MethodType, FunctionType
  2. print(isinstance(a.func,MethodType)) #MethodType 方法类型
  3. print(isinstance(A.func,MethodType))
  4. print(isinstance(a.func,FunctionType)) #FunctionType 函数类型
  5. print(isinstance(A.func,FunctionType))

3.pickle

  1. 1  # pickle 游戏人物的状态的保存(存档读档)
  2. 2 import pickle
  3. 3 pickle模块可以序列化python中的所有自定义类的对象
  4. 4 class Course:                  #创建一个课程类
  5. 5 def __init__(self,name,price,period):
  6. 6 self.name = name           #课程的名字=名字
  7. 7 self.price = price          #课程的价格=价格
  8. 8 self.period = period         #课程的周期=周期
  9. 9 class Student:                 #创建一个学生类
  10. 10 def __init__(self,name,price,period):
  11. 11 self.name = name           #名字=名字
  12. 12 self.price = price      
  13. 13 self.period = period
  14. 14 python = Course('python',88888,'6 months') #实例化一个python
  15. 15 linux = Course('linux',88888,'6 months') #实例化一个linux
     
       with open('courses','wb') as f: #把python实例化以wb模式写入到courses文件中
    pickle.dump(python,f)
  16.  
  17. with open('courses1', 'wb') as f:     #把linux实例化以wb模式写入到courses1文件中   
    pickle.dump(linux,f)
  18.  
  19.    with open('courses','rb') as f:       #以rb的模式读出python
    python = pickle.load(f)
  20.  
  21. with open('courses1', 'rb') as f:       #以rb的模式读出linux
    linux = pickle.load(f)
  22. print(python.name)                #输出python的名字
    print(linux.name)                #输出linux的名字
  1. 22 # 如果load一个对象,那么这个对象所对应的类必须已经在内存中
      # 同一个类的对象 会存储在同一个文件中
    #如果我不希望这个对象的load受到类读入的影响,就把这个类也写入到文件里

4.继承

  子类可以自动拥有父类中除了私有属性外的其他所有所有内容

5.继承就是解决类与类之间代码重复的问题

6.类的继承语法:

7,使用继承这个概念的过程:

  1. class Animal:
  2. def __init__(self,name,kind,):
  3. self.name = name
  4. self.kind = kind
  5.     
  6. class Cat(Animal):
  7. pass
  8. class Dog(Animal):
  9. pass
  10.  
  11. 小花 = Cat('小花','金吉拉','喵喵')
  12. print(小花)
  13. print(小花.name)
  14. print(小花.kind)
       # 先开辟一块空间,并且空间中已经有了一个类指针,指向Cat
        # 执行__init__方法,在Cat类的空间中没有init方法,找Animal类中的init
        # 将空间返回给小花变量

7,继承

     子类调用方法,如果子类自己有用自己的,用了自己的就不用父类的了
     如果子类自己没有才调用父类的
     如果子类有个性化的父类没有的方法,可以单独定义在子类中 - 派生方法
     只有子类能够使用父类中的方法,父类不可以使用子类中的方法

  1. # class Animal: #创建一个动物类 [Animal 动物:a nei mo]
  2. # def __init__(self,name,kind,language):
  3. # self.name = name #动物的名字=名字
  4. # self.kind = kind     #动物的种类=种类 [kind 种类:kan n d ]
  5. # self.language = language #动物的叫=叫 [language 叫:lan g wei z]
  6. # def eat(self):         #定义一个吃的方法 [eat 吃: yi t ]
  7. # print('%s is eating'%self.name)
  8. # def drink(self):        #定义一个喝的方法 [drink 喝: zhuai k ]
  9. # print('%s is drinking'%self.name)
  10. # def yell(self):        #定义一个叫的方法 [yell 叫: yao ]
  11. # print('%s say %s'%(self.name,self.language))
  12. # class Cat(Animal):     #定义一个猫类 继承动物类
  13. # def climb(self): # 派生方法 [climb 爬: k lai m]
  14. # print('%s can climb'%self.name)
  15. # class Dog(Animal): #定义一个狗类 继承动物类
  16. # def lookafter_door(self): # 派生方法
    # print('%s can look after door'%self.name)
  17. # 小花 = Cat('小花','金吉拉','喵喵')
  18. # 小黑 = Dog('小黑','土狗','旺旺')
  19. # 小花.climb()
  20. # 小黑.lookafter_door()

8,# 子类使用父类的方法
    # 子类中有,父类中没有 : 用子类的
    # 父类中有,子类中没有 : 用父类的
    # 子类\父类中都有    : 默认情况下用子类的不用父类的
                       # 既想用父类又想用子类 : 父类名.方法名(子类对象),super().方法名()
    # 子类\父类中都没有   : 报错

  1. # class Animal:
  2. # def __init__(self,name,kind,language):
  3. # self.name = name
  4. # self.kind = kind
  5. # self.language = language
  6. # def eat(self):
  7. # print('%s is eating'%self.name)
  8. # def drink(self):
  9. # print('%s is drinking'%self.name)
  10. # def yell(self):
  11. # print('%s say %s'%(self.name,self.language))
  12. # def sleep(self):
  13. # print('%s 在睡觉'%self.name)
  14. # class Cat(Animal):
  15. # def climb(self): # 派生方法
  16. # print('%s can climb'%self.name)
  17. # def sleep(self):
  18. # # Animal.sleep(self) # 父类名,主动传self
  19. # # super(cat,self).sleep()
  20. # # super().sleep() # super(子类名,self).方法名() 简写 记住这个就行
  21. # print('团着睡')
  22. # class Dog(Animal): # 派生方法
  23. # def lookafter_door(self):
  24. # print('%s can look after door'%self.name)
  25. #
  26. # 小花 = Cat('小花','金吉拉','喵喵')
  27. # 小花.sleep() # 既希望走父类的基础的sleep,又希望走自己的方法
  28. # 当某一个方法,父类和子类都拥有的时候,那么在子类的方法中,调用父类的同名方法2种
  29. # 1.父类名.方法名(self,...) # Animal.sleep(self)
  30. # 2.super().sleep(...)  # super(self,Cat).sleep()
  1. """人狗大战用继承方法写出来"""
    1 class Animal: #创建一个动物类 [Animal 动物:a nei mo]
  2. def __init__(self,name,hp,ad): #构造一个方法
  3. self.name = name
  4. self.hp = hp
  5. self.ad = ad
  6. class Person(Animal):      #创建一个人类 继承动物类
  7. def __init__(self,name,sex,hp,mp,ad):
  8. super().__init__(name,hp,ad)
  9. self.sex = sex # 派生属性
  10. self.mp = mp # 派生属性
  11.  
  12. def attack(self,dog):
  13. print('%s攻击了%s'%(self.name,dog.name))
  14. dog.hp -= self.ad
  15.  
  16. class Dog(Animal):
  17. def __init__(self,name,kind,hp,ad):
  18. super().__init__(name,hp,ad)
  19. self.kind = kind # 派生属性 (在原本在父类中没有的属性,在我的子类属性中出现了)
  20.  
  21. def bite(self,person):
  22. print('%s咬了%s'%(self.name,person.name))
  23. person.hp -= self.ad
  24.  
  25. alex = Person('alex','不详',10,10,0.1)
  26. hei = Dog('小黑','中华田园犬',999,1.1)
    print(alex.hp)
    hei.bite(alex)
    print(alex.hp)
    print(hei.hp)
    alex.attack(hei)
    print(hei.hp)
  27. print(hei.__dict__)

什么是派生属性

   在原本在父类中没有的属性,在我的子类属性中出现了

pickle 继承的更多相关文章

  1. Python自动化之pickle和面向对象初级篇

    pickle模块扩展 1 pickle之文件操作 示例1 with open("test", 'rb') as f: lines = f.readlines() print(pic ...

  2. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  3. python 序列化之JSON和pickle详解

    JSON模块 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类 ...

  4. python学习_应用pickle模块封装和拆封数据对象

    学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...

  5. Python常用模块 (2) (loging、configparser、json、pickle、subprocess)

    logging 简单应用 将日志打印到屏幕 import logging logging.debug('debug message') logging.info('info message') log ...

  6. pickle.dump()

    封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节流转化为Python数据对象,不要从不收信任的数据源中拆封数据.可以封装和拆封几乎任何Python数 ...

  7. Python之数据序列化(json、pickle、shelve)

    本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...

  8. python pickle 模块的使用

    用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...

  9. python序列化pickle/cPickle

    一.pickle/Cpickle简介 Python序列化的概念很简单.内存里面有一个数据结构,你希望将它保存下来,重用,或者发送给其他人.你会怎么做?这取决于你想要怎么保存,怎么重用,发送给谁.很多游 ...

随机推荐

  1. 5E - A + B Again

    There must be many A + B problems in our HDOJ , now a new one is coming. Give you two hexadecimal in ...

  2. andorid 三种方式的练习

    layout1   线性布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...

  3. linux 使用笔记2

    安装chrome浏览器在Fedora 23 下载pub wget https://dl-ssl.google.com/linux/linux_signing_key.pub 安装pub sudo rp ...

  4. [转]slf4j 与log4j 日志管理

    log4j简易入门 package test.log4j; import org.apache.log4j.Logger; public class HelloLog4j { private stat ...

  5. MSI-X 之有别于MSI

    转自: https://www.cnblogs.com/helloworldspace/p/6760718.html MSI-X Capability结构 MSI-X Capability中断机制与M ...

  6. JSONObject 的使用学习

    http://www.cnblogs.com/hitwtx/articles/2468633.html put与accumulate,element方法的区别什么? http://blog.csdn. ...

  7. 无法嵌入互操作类型"ESRI.ArcGIS.Carto.MapDocumentClass".请改用适用的接口

    在对地图文档进行操作时,居然出现如下问题: IMapDocument m_MapDocument = new ESRI.ArcGIS.Carto.MapDocumentClass(); 报错: 无法嵌 ...

  8. cpp 区块链模拟示例(七) 补充 Merkle树

    Merkle 树 完整的比特币数据库(也就是区块链)需要超过 140 Gb 的磁盘空间.因为比特币的去中心化特性,网络中的每个节点必须是独立,自给自足的,也就是每个节点必须存储一个区块链的完整副本.随 ...

  9. PSP(3.30——4.5)以及周记录

    1.PSP 3.30 12:00 13:00 10 50 Account前端 A Y min 13:00 13:20 0 20 站立会议 A Y min 15:15 17:00 20 85 Accou ...

  10. sql心跳

    因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短. 问:为什么需要设置interactive_timeout  wait_t ...