- 2021年6月5日下午列车讨论:
1.类属性本身不需要实例化也可以调用。
2.实例化之后得到的就是实例属性,就是专属于各个实例自己的属性,就是初始化方法__init__里面那些self.xxx=xxx。
这里的self是一个占位符,直接指向实例对象,也就是说,如果是实例对象的方法或者属性,就一定要添加self这个占位符。
相当于在类没有创建实例对象前,用self先给它占个位,实例化后,self就“退位让贤”。
3.
4.pass语句,其作用是:
不执行任何操作,但pass本身是一个语句,所以计算机还是会执行该语句的,
但如果不写,计算机会报错,因为计算机找不到可执行的代码,就会报错。
5.在检索时,应该先遵循多重继承的就近原则,再看是否有多层继承,如果有的话,检索到底,如果没有,则继续向后检索父类。
6.就近原则中的一个细节:多重继承中,若某父类还有父类的话,会先继续往上找到顶。
#案例1:
class C0:
name='C0'
class C1:
num=1
class C2(C0):
num=2
class C3:
name='C3'
class C4(C1,C2,C3):
pass
ins=C4()
print(ins.name)
print(ins.num)
#C0,C1,C3属于同一个层级,C1,C2,C3是C4的多重继承;C0是C4的多层继承。
#先看多重继承,打印ins.name 的时候还是先去找C1,C1没有name这一属性;接着去找C2,此时发现有多层继承(C0是C4的多层继承),便去找C0,C0有name这一属性,所以打印出ins.name为‘C0’;
#打印ins.num的时候还是先去找C1,C1有num这一属性,所以打印出ins.num为1。
#输出结果:
#C0
#1
#案例2:
class C0:
name='C0'
class C1(C0):
num=1
class C2(C0):
num=2
class C3(C0):
name='C3'
class C4(C1,C2,C3):
pass
print(C4.name)
print(C4.num)
#输出结果:
#C3
#1
#案例3:
class C0:
name='C0'
class C1(C0):
num=1
class C2(C0):
num=2
class C3(C0):
name='C3'
class C4(C1,C2,C3):
pass
a=C4()
print(a.name)
print(a.num)
#C1,C2,C3是C4的多重继承,C0是C4的多层继承。
#输出结果:
#C3
#1
辅助理解图: