python9.继承和多继承和魔法方法

继承:
class xx(object):这里的object写不写出来都无所谓,是一个隐藏方法(属于继承里的最老的类),包含着很多本来就有方法
所以class xx(a):就可以继承a的属性和方法,不写a就是继承object,必须有括号才有继承,没括号不执行
派生和继承一个意思
继承搜索:
调用寻找属性或方法时,从实例找,找不到就去访问类的,如果找不到则转到他的父类(直接基类)去找,再找不到就父类的父类(间接基类),
一级一级往上找到为止,顶级的基类就是object
__bases__魔法属性(不是魔法方法,效果是返回tuple的形式来查看类的直接父类)
print(类名.mro)可以查看顺序排列出的所有有关父类
魔法属性还有下划线加class(查看类名,实例的属性,这里的属性不能直接查看类的,实例被指向不能带出整个类的属性,除非在外部赋予或引用)
加dict把属性当keys,属性对应的参数当value来合成字典
doc查看提前加"""的信息,使用时用类名.doc
多继承:
写入多个类名时,有相同属性或方法时只执行放在第一个的类的
继承了父类又不想执行父类的,可以重写来覆盖父亲的方法(直接设立然后重新写入,方法名或属性名要相同)
重写后覆盖了父类的,如果想再次调用父类的方法,可以用一下方法:
1.子类方法中加父类名.方法名(self),这里的父类名可以是直接父类,也可以是间接父类,还可以是顶级父类
2.子类方法中加super().方法名()
super是直接调用父类的对应方法,不仅可以在重写的情况也可以用,用列表表示,mro的是用元组表示
基于多继承的Mix-in设计模式(一般Mix-in类是继承的终点,传统的是多层的多继承,这里的是一层的多继承,是一种开发模型,降低耦合度(联系性))
魔法方法:
__add__执行加法运算时会自动执行,实例的属性参数可以相加(进行加法运算只要有一个add所在的类的实例对象就会开始自动执行)
add(self,other)
加号前的传入self,加号后的传入到other
__str__和__repr__是分别调用str和repr的方法(使用时一定要加return)
__str__会返回经过处理的数据(对使用者有用),__repr__会返回原数据(对开发者有用)
print()打印方式会先用str(如果调用类时又不去打印,他会自动执行出地址)没有附加str就会用repr,如果不提前附加str又没有附加repr方法不能调用就会显示内存地址
交互模式下(在其他系统环境执行时),打印print时只用str,直接调用对象只会用repr方法
打印也是存在隐藏魔法方法的
类一般不能像函数一样被调用的
__call__用在子类用自动调用父类的属性而不需要再在子类设属性(能从父类众多属性里单独挑),实例要用需要所在的类提前定义好(能让实例像函数一样被调用)

猜你喜欢

转载自blog.csdn.net/qwe863226687/article/details/113933921
今日推荐