簡體   English   中英

如何將_not_繼承的屬性添加到python * class *?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM