方法解析顺序
class A:
def aa(self):
return
def say(self):
print("我是AAA")
class B:
def bb(self):
return
def say(self):
print("我是BBB")
class C(A,B):
def cc(self):
return
c=C()
c.say() #运行结束我是AAA
class A:
def aa(self):
return
def say(self):
print("我是AAA")
class B:
def bb(self):
return
def say(self):
print("我是BBB")
class C(B,A): #改变这里
def cc(self):
return
c=C()
c.say() #运行结束我是BBB
super用来获取父类定义
class A:
def say(self):
print("A!!!:",self)
class B(A):
def say(self):
A.say(self)
print("B!!!:",self)
B().say()
#A: <__main__.B object at 0x00000194A9418400>
#B: <__main__.B object at 0x00000194A9418400>
和下面的写法是一致的
class A:
def say(self):
print("A!!!:",self)
class B(A):
def say(self):
super().say() #这一步的改变
print("B!!!:",self)
B().say()
#A: <__main__.B object at 0x00000194A9418400>
#B: <__main__.B object at 0x00000194A9418400>
运算符的重载
#运算符的重载
class Person:
def __init__(self,name):
self.name=name
def __add__(self,othername): #运算符的重载,这里采用的是加法
if isinstance(othername,Person):
return "{0}加{1}".format(self.name,othername.name)
else:
return "出错啦"
q1=Person("小李")
q2=Person("小王")
m=q1+q2
print(m) #输出结果为“小李加小王”
class A:
pass
class B:
pass
class C(A,B):
def __init__(self,nn):
self.nn = nn
def cc(self):
print("我是CCC")
ddd=C(3)
print(dir(ddd))
print(ddd.__dict__) #输出 一串属性字典 {'nn': 3}
print(ddd.__class__) #输出 所属的类 <class '__main__.C'>
print(C.__bases__) #输出 类的父辈 元组形式展现 (<class '__main__.A'>, <class '__main__.B'>)
print(C.__base__)
print(C.__mro__) #输出 层次结构 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print(A.__subclasses__()) #子类列表 [<class '__main__.C'>]
对象的深浅拷贝
#测试对象的引用赋值、浅拷贝、深拷贝
import copy #引入
class MobilePhone:
def __init__(self,cpu,screen):
self.cpu = cpu
self.screen = screen
class CPU:
def calculate(self):
pass
class Screen:
def show(self):
pass
#测试变量赋值
c1=CPU()
c2=c1
print(c1) #<__main__.CPU object at 0x000001FED1AA1C10>
print(c2) #<__main__.CPU object at 0x000001FED1AA1C10>
#测试浅拷贝
s1=Screen()
m1=MobilePhone(c1,s1)
m2=copy.copy(m1)
print(m1) #<__main__.MobilePhone object at 0x00000296CC016640>
print(m2) #<__main__.MobilePhone object at 0x00000296CC12B0A0>
print(m1,m1.cpu,m1.screen)
print(m2,m2.cpu,m2.screen)
#<__main__.MobilePhone object at 0x0000016830F06640> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#<__main__.MobilePhone object at 0x000001683144B0A0> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#可以看出的是表同但是里不同
print("#############")
#测试深拷贝
m3=copy.deepcopy(m1)
print(m1,m1.cpu,m1.screen)
print(m3,m3.cpu,m3.screen)
#<__main__.MobilePhone object at 0x0000016830F06640> <__main__.CPU object at 0x0000016831441C10> <__main__.Screen object at 0x0000016831441FD0>
#<__main__.MobilePhone object at 0x0000016831494F10> <__main__.CPU object at 0x00000168315C9D60> <__main__.Screen object at 0x00000168315C9D90>
#可以看出里外都不一样