類的全部成員分爲:字段,方法
公有成員,在任何地方都能訪問
私有成員,只有在類的內部才能訪問
私有成員和公有成員的定義不一樣:私有成員命名時,前兩個字符是下劃線。(特殊成員除外,例如:init、call等)
私有成員和公有成員的訪問限制不一樣:
靜態字段:
公有靜態字段:類能夠訪問,類內部能夠訪問;派生類中能夠訪問
私有靜態字段:僅類內部能夠訪問
普通字段:
公有普通字段:對象能夠訪問;類內部能夠訪問;派生類中能夠訪問
私有普通字段:僅類內部能夠訪問
方法、屬性的訪問與上述方式類似,即,私有成員只能在類內部使用。
PS:私有成員若非要訪問的話,能夠經過 對象._類__屬性名 來訪問。ide
私有普通字段code
# -*-coding:utf-8 -*- __author__ = 'xiaojiaxin' __file_name__ = '成員修飾符' class foo: def __init__(self,name,age,__age): self.name=name self.age=age self._age=age #私有,外部沒法直接訪問 def show(self): return self._age #間接訪問私有字段 obj=foo("jiaxin",10,1) print(obj.name) print(obj.age) print(obj._age) print(obj.show())
私有靜態字段對象
class Hoo: __v="123" def __init__(self): pass def show(self): return Hoo.__v @staticmethod def staticmd(): return Hoo.__v #print(Hoo.__v) #靜態私有字段不能被外部訪問 obj2=Hoo() print(obj2.show()) #靜態私有字段能夠間接被外部訪問 # 123 obi3=Hoo.staticmd() print(obi3) # 123
私有普通方法繼承
class qoo: def __f1(self): return "f1" def f2(self): r=self.__f1() return r obj4=qoo() print(obj4.f2()) # f1
派生類不能繼承基類的私有字段utf-8
class F: def __init__(self): self.ge="dad1" self.__gene="dad" class S(F): def __init__(self,name): self.name="son" self.__age=10 super(S,self).__init__() def show(self): print(self.name) print(self.__age) print(self.ge) #print(self.__gene) #沒法訪問父類的私有字段,只能經過繼承公有才行 s=S("jiaxin") s.show()