如何从 Python 中的子类访问 dundle 方法?

How to access dundle method from a subclass in Python?

提问人:FraSchelle 提问时间:10/14/2022 更新时间:10/14/2022 访问量:87

问:

我有一种方法可以直接访问 Python 子类中的 dundle 方法?

想象一下,我有以下课程:

class Parent(object):
    def __init__(self, x):
        self.x = x
    
    def __add(self,y):
        return self.x + y
    
    def addition(self,y):
        return self.__add(y)

class Children(Parent):
    
    def add(self,y):
        return self.__add(y)

我显然可以实例化这两个类,并在两个类上使用,但我不能使用 from 的实例。如何访问从类继承到类的方法?additionaddChildren__addParentChildren

p = Parent(2)
p.addition(4)

c = Children(5)
c.addition(4)

所有这些调用都有效,但以下两个调用不起作用

p.__add(5)  # AttributeError: 'Parent' object has no attribute '__add'
c.add(4)  # AttributeError: 'Children' object has no attribute '_Children__add'

两者都返回 not 属性。第一个行为是预期的,我不想改变,但第二个行为让我感到不安,因为子类应该能够访问其父隐藏方法,不是吗?

更多细节 : 实际上,在我的情况下,父类正在处理数据库连接,并处理用户名和密码,并使用一些我更喜欢让“私有”的方法来检查密码。我想从不同的子类调用,这些子类稍后处理数据操作。__check_password__check_password

Python 继承 子类 private-methods

评论

1赞 Axe319 10/14/2022
return self._Parent__add(y)?请参阅名称修改
1赞 MisterMiyagi 10/14/2022
整个重点是防止来自子类的访问。虽然仍然可以访问,但你为什么要这样做?最简单的方法就是使用方法,而是使用或 的方法。__private__private_protectedpublic
0赞 FraSchelle 10/14/2022
@MisterMiyagi 感谢您的评论。我已经在我的问题中解释了为什么我想要这个
0赞 MisterMiyagi 10/14/2022
@FraSchelle 目前的问题只是说你更喜欢私密,然后立即说你不想把它当作私密。我希望有一个实际的原因,而不是对明显矛盾的重述。__check_password
1赞 MisterMiyagi 10/14/2022
这回答了你的问题吗?对象名称前的单下划线和双下划线是什么意思?

答: 暂无答案