如何在子类中“隐藏”超类方法

2024-02-16

我基本上想创建一个子类来“隐藏”超类上的方法,以便它们不会出现在dir() or hasattr()呼叫并且用户无法呼叫他们(至少不能通过任何正常渠道)。我也想用尽可能少的“魔法”来做到这一点。谢谢。


覆盖__dir__ and __getattribute__方法分别应该可以解决问题。这几乎是在 Python 中执行此类操作的规范方法。尽管您是否应该真正这样做完全是另一回事。

请参阅 Python 文档自定义属性访问 http://docs.python.org/reference/datamodel.html#customizing-attribute-access

Use __dir__列出可用属性(这不会影响实际的属性访问)

class A(object):
    def __dir__(self):
        return []

>>> print dir(A())
[]

Use __getattribute__控制实际属性访问

class A(object):
    def __getattribute__(self, attr):
        """Prevent 'private' attribute access"""
        if attr.startswith('_'):
            raise AttributeError

        return object.__getattribute__(self, attr)


>>> a = A()
>>> a.x = 5
>>> a.x
5
>>> a._x = 3
>>> a._x
AttributeError

这可能就是您正在尝试做的事情。

class NoSuper(object):
    def __getattribute__(self, attr):
        """Prevent accessing inherited attributes"""
        for base in self.__bases__:
            if hasattr(base, attr):
                raise AttributeError

        return object.__getattribute__(self, attr)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在子类中“隐藏”超类方法 的相关文章

随机推荐