我需要能够在子类不可见的类(不是类的实例)上设置一个标志。问题是,这可能吗?如果可能,我该怎么做?
为了说明,我想要这样的东西:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
... 其中 hasattr(Master, "__flag__")
应该为 Master
返回 True
但 False
为 child
。这可能吗?如果是这样,如何?我不想在每个 child 中都将 __flag__
显式设置为 false。
我最初的想法是定义 __metaclass__
,但我没有那么多奢侈,因为 Master
继承自一些我无法控制的其他类和元类哪些是私有(private)的。
最终我想写一个装饰器,这样我就可以做类似的事情:
@hide_this
class Master(SomeOtherClass): pass
@hide_this
class Child(Master): pass
class GrandChild(Child): pass
...
for cls in (Master, Child, GrandChild)
if cls.__hidden__:
# Master, Child
else:
# GrandChild
最佳答案
你们非常亲密:
class Master(SomeOtherClass):
__flag = True
class Child(Master):
pass
两个前导下划线没有尾随下划线调用名称重整,因此该属性将被命名为_Master__flag
。因此,如果您检查:
hasattr(cls, '_{}__flag'.format(cls.__name__))
对于 Master
,它只有是True
,而不是Child
。
关于python - 如何向 _not_ 继承的 python *class* 添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945244/