我需要能夠設置一個類(而不是對一個類的實例)的標誌,這是不可見的子類。問題是,這有可能嗎?如果是這樣,我該怎麼做?如何將屬性添加到_not_繼承的python * class *?
爲了說明,我想是這樣的:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
...其中hasattr(Master, "__flag__")
應該Child
返回True
爲Master
但False
。這可能嗎?如果是這樣,怎麼樣?我不想在每個孩子中明確地設置__flag__
爲假。
我最初的想法是定義__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'屬性。 – jonrsharpe
有沒有你不想寫'cls .__ dict __。get('__ hidden __')'的原因,除了它很醜? –
@jonrsharpe:不,不會出現這種解決方案。這將非常有效。寫一個答案,以便我可以接受它,如果你想。如果你不這樣做,我會自己添加答案以供將來參考。謝謝! –