![](/img/trans.png)
[英]How to set and get a parent class attribute from an inherited class in Python?
[英]How to add attribute to python *class* that is _not_ inherited?
我需要能夠在子類不可見的類上 ( 而不是在類的實例上)設置標志。 問題是,是否可能,如果可以,我將如何做?
為了說明,我想要這樣的東西:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
... hasattr(Master, "__flag__")
對於Master
應該返回True
,對Child
應該返回False
。 這可能嗎? 如果是這樣,怎么辦? 我不想在每個孩子中都將__flag__
顯式設置為false。
我最初的想法是定義__metaclass__
,但是我沒有這樣做的奢侈之處,因為Master
繼承__metaclass__
不控制的其他一些類和元類,它們是私有的。
最終,我想編寫一個裝飾器,以便可以執行以下操作:
@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
,因此該屬性將命名為_Master__flag
。 因此,如果您檢查:
hasattr(cls, '_{}__flag'.format(cls.__name__))
這對Master
才是 True
的,對Child
不然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.