python, 私有属性详解


  

  

class Animal: __ORE= 'Animal ore' @classmethod def getore(cls): # 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) class Pig(Animal): __ORE='Pig ore' # @classmethod # def getore(cls): # print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) p=Pig() p.getore() # 得到是Animal的__ORE print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性 # print(Animal.__dict__)

 

 

下面将父类的getore方法override

class Animal: __ORE= 'Animal ore' @classmethod def getore(cls): # 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) class Pig(Animal): __ORE='Pig ore' @classmethod def getore(cls): print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) p=Pig() p.getore() # 得到是Animal的__ORE print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性 # print(Animal.__dict__)

  

 

 getore获取到的是Pig的私有属性了

 

做一个深入的实验

class Animal: __ORE= 'Animal ore' @classmethod def getore(cls): # 由于是私有属性,所以此处的cls.__ORE已经被解释器替换成cls._Animal_ORE print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) class Pig(Animal): __ORE='Pig ore' _Animal__ORE='Pig phony ORE' # @classmethod # def getore(cls): # print('class: {}\tclassORE: {}'.format(cls.__name__, cls.__ORE)) p=Pig() p.getore() # 得到是Animal的__ORE print(Pig.__dict__) # 只展现在自己类内部定义的属性,不会展现父类属性 # print(Animal.__dict__)

自定义一个跟替换后同名的属性于Pig类中

 

 

 

class Animal: __COUNT=5 # 私有属性全部被替换 __AGE=9 def __init__(self,name): self.__AGE+=1 self._name=name self.__COUNT+=2

class Hipo(Animal): __COUNT=55 _Animal__AGE=99 # 此属性才真正替换了父类的__AGE属性 h=Hipo('hipo') print(h.__dict__) print(Hipo.__dict__) print(Animal.__dict__)

 

 

 

父类的初始化方法__init__中如果有私有属性,子类最好将其override

 

 

重写__init__方法,也会增加父类的私有属性

class Animal: __COUNT=5 # 私有属性全部被替换 __AGE=9 def __init__(self,name): self.__AGE+=1 self._name=name self.__COUNT+=2

class Hipo(Animal): __COUNT=55 __AGE=88 _Animal__AGE=99 # 此属性才真正替换了父类的__AGE属性 def __init__(self,name): super().__init__(name) self.__AGE+=1 self.__COUNT+=2 h=Hipo('hipo') print(h.__dict__) print(Hipo.__dict__) print(Animal.__dict__)

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM