【发布时间】:2015-06-19 18:46:38
【问题描述】:
我需要能够在子类不可见的类(不是类的实例上)上设置一个标志。问题是,有没有可能,如果有,我该怎么做?
为了说明,我想要这样的东西:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
... 其中hasattr(Master, "__flag__") 应该为Master 返回True 而False 为Child。这可能吗?如果是这样,怎么做?我不想在每个孩子中都明确地将 __flag__ 设置为 false。
我最初的想法是定义__metaclass__,但我没有这样做的奢侈,因为Master 继承自其他一些我无法控制且是私有的类和元类。
最终我想写一个装饰器,这样我就可以做类似的事情:
@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
【问题讨论】:
-
你可以设为
__hidden,那么只有直接定义它的类才有_ClassName__hidden属性。 -
有什么理由不想写
cls.__dict__.get('__hidden__'),除了它很丑吗? -
@jonrsharpe:不,我没有想到这个解决方案。这将非常有效。写一个答案,如果你愿意,我可以接受。如果您不这样做,我将自己添加答案以供将来参考。谢谢!