具有父子关系的 Python OOO 编码



我有一个父类和子类。 父类有 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()

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

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

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

最新更新