サブクラスからは見えないクラス(クラスのインスタンスではない)にフラグを設定できる必要があります。問題は、それは可能ですか、もしそうならどうすればいいですか?
説明のために、私はこのようなものが欲しいです:
class Master(SomeOtherClass):
__flag__ = True
class Child(Master):
pass
...どこにhasattr(Master, "__flag__")
戻るTrue
必要Master
があります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
あなたはとても近かった:
class Master(SomeOtherClass):
__flag = True
class Child(Master):
pass
末尾にアンダースコアがない2つの先頭のアンダースコアは、名前マングリングを呼び出すため、属性には_Master__flag
。という名前が付けられます。したがって、次のことを確認してください。
hasattr(cls, '_{}__flag'.format(cls.__name__))
のためだけでありTrue
、Master
ではありませんChild
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加