类的属性
Python语言中的类的属性有2种:
- 实例属性
- 类属性
两类属性的区别在于:
- 实例属性即同一个类的不同实例,其值并不关联和影响。
- 类属性名是同一个类的实例所共有的,在类中直接定义,引用时用 类名.类变量名 形式,对该属性的修改会影响该类的所有实例。
类的继承
继承可以减少代码,增加灵活性。子类继承父类之后,就具有了父类中除了私有属性和私有方法外的其他属性和方法。而Python不同于其他语言,允许多重继承。
各类参考书中对类的特性的讲述和实例不少,本实例意在让大家体会下上述两个知识点,以免在遇到如上使用方法时有所困惑。
'''
此程序的知识点:
1.类的属性和实例属性的概念,namea和nameb为类属性,
在实例化的过程如改变其值,在下次实例化中,其属性将
为新值。
2.多重继承中继承顺序很重要,若继承的多个父类中有相同
的方法名,但在使用中未指定父类名,则Python解释器按照
从左到右搜索,即调用先继承勒种的同名方法。
'''
class PrntA:
namea='PrntA'
def set_value(self,a):
self.a=a
def set_namea(self,namea):
prntA.namea=namea
def info(self):
print('打印A类信息:%s,%s'%(PrntA.namea,self.a))
class PrntB:
nameb='PrntB'
def set_nameb(self,nameb):
PrntB.nameb=nameb
def info(self):
print('打印B类信息:%s'%(PrntB.nameb,))
class Sub(PrntA,PrntB):
pass
class Sub2(PrntB,PrntA):
pass
class Sub3(PrntA,PrntB):
def info(self):
PrntA.info(self) #注释
PrntB.info(self) #注释
print('使用第一个sub class:')
sub=Sub()
sub.set_value('CLASSA1')
sub.info()
sub.set_nameb('CLASSB1')
sub.info()
print('*****华丽分割线*****')
print('使用第二个sub class:')
sub2=Sub2()
sub2.set_value('CLASSA2')
sub2.info()
sub2.set_nameb('CLASSB2')
sub2.info()
print('*****华丽分割线*****')
print('使用第三个sub class:')
sub3=Sub3()
sub3.set_value('CLASSA3')
sub3.info()
sub3.set_nameb('CLASSB3')
sub3.info()
运行结果
============== RESTART: C:/Users/Administrator/Desktop/HAHHA.py ==============
使用第一个sub class:
打印A类信息:PrntA,CLASSA1
打印A类信息:PrntA,CLASSA1
*****华丽分割线*****
使用第二个sub class:
打印B类信息:CLASSB1
打印B类信息:CLASSB2
*****华丽分割线*****
使用第三个sub class:
打印A类信息:PrntA,CLASSA3
打印B类信息:CLASSB2
打印A类信息:PrntA,CLASSA3
打印B类信息:CLASSB3
怎么样,考虑到上述的知识点,结果跟你们想象的有没有什么不一样呢?