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