2012-10-06 84 views
0

我有父母和子女班。父類有2個屬性x,y。 Y可以用__(雙下劃線)設置爲私有變量,但是我不能將它暴露給子類,所以我將它作爲_(單獨的下劃線)提供給子類。與父母子女關係的Python OOO編碼

但我不希望它被暴露比個子類等..

反正是有覆蓋在孩子的方法來保護變量y初始化類暴露?

test.py

class parent: 

    def __init__(self,x): 
     self.x = x 
     self._y = ' ' 
     self.setyvalue() 

    def setyvalue(self): 
     self._y = 10 
     return self._y 
class child(parent): 
    def test(self): 
     print('self.x',self.x) 
     print('self._y',self._y) 

if __name__ == '__main__': 
    x = child(2) 
    x.test() 

回答

0

按照慣例,一個以下劃線開頭的變量被認爲是「私人」的,它不應該在課堂外使用。 Python並沒有阻止它,但它是應該被尊重的約定。這是你在Python中的做法:一切都是允許的,但是你記錄了它應該如何使用。

2

號Python沒有提供這樣才能真正隱藏屬性;它只是提供約定來阻止不適當的訪問。使用單下劃線是一種慣例,它將其標記爲私有,並警告用戶如果他們使用該變量,他們將冒着災難。

請注意,即使雙下劃線「隱藏」也不是很強的安全性。如果您的班級Foo具有__blah的屬性,則外部人員仍可以訪問它_Foo__blah。再一次,這只是一種阻止外部訪問的慣例,但並不妨礙它。