0

我有一个父子类。父类有 2 个属性 x,y。Y 可以使用 __(双下划线) 设置为私有变量,但我不能将它公开给子类,所以我将它作为 _(单下划线) 将其公开给子类。

但我不希望它暴露在子类之外..

无论如何要覆盖子方法中的 init 类以保护 y 变量被暴露?

测试.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()
4

2 回答 2

2

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

请注意,即使是双下划线“隐藏”也不是很强的安全性。如果你的类 Foo 有一个属性__blah,它仍然可以被外人访问为_Foo__blah. 同样,这只是一种不鼓励外部访问但并不阻止它的约定。

于 2012-10-06T20:13:40.727 回答
0

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

于 2012-10-06T20:14:20.263 回答