6 python attributes properties subclass
我基本上想要创建一个子类,它在超类上"隐藏"方法,这样它们就不会出现在一个dir()或者一个hasattr()调用中,而用户也无法调用它们(至少不能通过任何普通的通道).我也想用尽可能少的"魔法"来做到这一点.谢谢.
分别覆盖__dir__和__getattribute__方法应该可以解决问题.这是在Python中执行此类操作的规范方法.虽然你是否真的应该这样做完全是另一回事.
请参阅自定义属性访问的 Python文档
使用__dir__列出可用的属性(这不会影响实际属性的访问)
class A(object):
def __dir__(self):
return []
>>> print dir(A())
[]
Run Code Online (Sandbox Code Playgroud)
使用__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
Run Code Online (Sandbox Code Playgroud)
这可能是你想要做的.
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |