具有父子关系的Python OOO编码

具有父子关系的Python OOO编码,python,Python,我有一个家长和孩子班。父类有两个属性x,y。Y可以设置为带有_(双下划线)的私有变量,但我不能将其公开给子类,因此我将其作为_(单下划线)提供给子类 但我不想让它暴露在孩子们之外 在子方法中是否有重写init类的方法来保护被暴露的y变量 test.py class parent: def __init__(self,x): self.x = x self._y = ' ' self.setyvalue() def setyv

我有一个家长和孩子班。父类有两个属性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()

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


请注意,即使是双下划线“隐藏”也不是很强的安全性。如果您的类Foo有一个属性
\uuuu blah
,那么外部人员仍然可以作为
\ufoo\uu blah
访问它。同样,它只是一种不鼓励外部访问但不阻止外部访问的约定。

按照约定,以下划线开头的变量被视为“private”,不应在类外使用。Python并没有阻止它,但应该遵守的是惯例。这是您在Python中的操作方式:一切都是允许的,但您需要记录应该如何使用它