Python OOO编码与父子关系

时间:2012-10-06 20:10:07

标签: python

我有父母和子女班。父类有2个属性x,y。 Y可以用__(双下划线)设置为私有变量,但是我不能将它暴露给子类,所以我将它作为_(单个下划线)给它暴露给子类。

但我不希望它暴露在除了儿童班之外......

无论如何都要覆盖子方法中的init类来保护暴露的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()

2 个答案:

答案 0 :(得分:2)

没有。 Python没有提供真正隐藏属性的方法;它只是提供阻止不当访问的惯例。使用单个下划线是一种将其标记为私有的约定,并警告用户如果他们使用该变量,则他们将面临灾难。

请注意,即使是双下划线“隐藏”也不是很强大的安全性。如果您的Foo类具有属性__blah,则外部人员仍可以_Foo__blah访问该属性。同样,这只是一个阻止外部访问但不阻止它的约定。

答案 1 :(得分:0)

按照惯例,以下划线开头的变量被视为“私有”,不应在类外使用。 Python并没有阻止它,但它是应该受到尊重的约定。这是你在Python中的方式:允许一切,但你记录了它应该如何使用。