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
辅助理解图: