嗯,我幾乎一樣question,除了一個細節:我需要獲得基類的私有值。代碼:從子類獲取父私有或受保護的值
class Parent(object):
def __init__(self):
self.__field = 13
class Child(Parent):
"""docstring for Child"""
def __init__(self):
super(Child, self).__init__()
def ChildMethodWhichUsingParentField(self):
return self.__field
if __name__ == '__main__':
c = Child()
c.ChildMethodWhichUsingParentField()
解釋輸出:
Traceback (most recent call last):
File "foo.py", line 20, in <module>
c.ChildMethodWhichUsingParentField()
File "foo.py", line 16, in ChildMethodWhichUsingParentField
return self.__field
AttributeError: 'Child' object has no attribute '_Child__field'
的問題是,解釋試圖讓_Child__field
當我需要_Parent__field
。我可以使用@property
得到這個值,但它會制動封裝。此外,我可以解決這個問題寫self._Parent__field
但這是醜陋的,顯然是錯誤的代碼。還有其他方法嗎?
你爲什麼不停止在兩個下劃線前加'field'? – jonrsharpe 2014-10-11 20:27:03
單個下劃線是一種類型的定製「私人」成員。 – 2014-10-11 20:36:48
@jonrsharpe,因爲這會制動封裝。 '領域'是重要的,僅供內部使用。我想確保沒有人能看到和/或修改'field'。 – Montreal 2014-10-11 20:39:45