青岛网站开发培训价格,如何在手机上编程游戏,php管理系统 网站模版,无锡建设机械网站制作一、多重继承 Python支持多重继承#xff0c;一个子类可以有多个“直接父类”。这样#xff0c;就具备了“多个父类”的特点。但是由于#xff0c;这样会被“类的整体层次”搞的异常复杂#xff0c;尽量避免使用。
class A:def aa(self):print(aa)
class B…一、多重继承 Python支持多重继承一个子类可以有多个“直接父类”。这样就具备了“多个父类”的特点。但是由于这样会被“类的整体层次”搞的异常复杂尽量避免使用。
class A:def aa(self):print(aa)
class B:def bb(self):print(bb)
class C(B,A):def cc(self):print(cc)
c C()
c.cc()
c.bb()
c.aa()类结构为 二、MRO方法解析顺序
Python支持多继承如果父类中有相同名字的方法在子类没有指定父类名时解释器将“从左向右”按顺序搜索。
MROMethod Resolution Order方法解析顺序。 我们可以通过mro()方法获得“类的层次结构”方法解析顺序也是按照这个“类的层次结构”寻找的。
class A:def aa(self):print(aa)
def say(self):print(say AAA!)
class B:def bb(self):print(bb)
def say(self):print(say BBB!)
class C(B,A):def cc(self):print(cc)
c C()
print(C.mro()) #打印类的层次结构
c.say() #解释器寻找方法是“从左到右”的方式寻找此时会执行B类中的say()执行结果 [main.C, main.B, main.A, ] say BBB! 三、super()获得父类定义
在子类中如果想要获得父类的方法时我们可以通过super()来做。
super()代表父类的定义不是父类对象。 ❤️想调用父类的构造方法 super(子类名称,self).__init__(参数列表) class A:def __init__(self):print(A的构造方法)
def say(self):print(A: ,self)print(say AAA)
class B(A):def __init__(self):super(B,self).__init__() #调用父类的构造方法print(B的构造方法)def say(self):#A.say(self) 调用父类的say方法super().say() #通过super()调用父类的方法print(say BBB)
b B()
b.say()运行结果
A: __main__.B object at 0x007A5690
say AAA
say BBB四、多态 多态polymorphism是指同一个方法调用由于对象不同可能会产生不同的行为。 比如现实生活中同一个方法具体实现会完全不同。 比如同样是调用人“吃饭”的方法中国人用筷子吃饭英国人用刀叉吃饭印度人用手吃饭。 关于多态要注意以下2点
多态是方法的多态属性没有多态。多态的存在有2个必要条件继承、方法重写
#多态
class Animal:def shout(self):print(动物叫了一声)
class Dog(Animal):def shout(self):print(小狗汪汪汪)
class Cat(Animal):
def shout(self):print(小猫喵喵喵)
def animalShout(a):a.shout() #传入的对象不同shout方法对应的实际行为也不同。
animalShout(Dog())
animalShout(Cat())五、特殊方法和运算符重载
Python的运算符实际上是通过调用对象的特殊方法实现的。
a 20
b 30
c ab
d a.__add__(b)
print(c,c)
print(d,d)运算结果
c 50
d 50常见的特殊方法统计如下
方法说明例子__init__构造方法对象创建和初始化p Person()__del__析构方法对象回收__repr__,__str__打印转换print(a)__call__函数调用a()__getattr__点号运算a.xxx__setattr__属性赋值a.xxx value__getitem__索引运算a[key]__setitem__索引赋值a[key]value__len__长度len(a)
每个运算符实际上都对应了相应的方法统计如下
运算符特殊方法说明__add__加法-__sub__减法 __lt__ __le__ __eq__比较运算符 !__gt__ __ge__ __ne__比较运算符| ^ __or__ __xor__ __and__或、异或、与 __lshift__ __rshift__左移、右移* / % //__mul__ __truediv__ __mod__ __floordiv__乘、浮点除、模运算取余、整数除**__pow__指数运算
我们可以重写上面的特殊方法即实现了“运算符的重载”。
#测试运算符的重载
class Person:def __init__(self,name):self.name name
def __add__(self, other):if isinstance(other,Person):return {0}--{1}.format(self.name,other.name)else:return 不是同类对象不能相加
def __mul__(self, other):if isinstance(other,int):return self.name*otherelse:return 不是同类对象不能相乘
p1 Person(高淇)
p2 Person(高希希)
x p1 p2
print(x)
print(p1*3)运算结果
高淇--高希希
高淇高淇高淇