例チェッククラス属性が指定されたクラスで定義されているか、導出された場合
class A:
foo = 1
class B:
foo = 2
class C:
foo = 3
class D(A, B, C):
pass
def collect_foo(cls):
import inspect
foos = []
for c in inspect.getmro(cls):
if hasattr(c, 'foo'):
foos.append(c.foo)
return foos
今collect_foo(D)
戻り[1, 1, 2, 3]
から1
D
はA
からそれを引き出すと倍増しています。問題は - 一意になる方法foo
sです。私の心に来た最初のことは、プロパティが特定のクラスで派生されたか宣言されているかどうかをチェックすることでした。どうやってするか?
これは厄介なことです。なぜあなたはそれをやっていますか? – katrielalex
また、 'set(collect_foo(D))'はあなたが望むことをしますか? – katrielalex
私は約100のクラスを書く必要があります。クラスの中には、「Class1(Feature1、Feature2)」や「Class2(Feature2、Feature1337)」などの特定の構成があります。私が上書きするのではなく、混在して派生クラスで利用できるような属性がいくつかあります。そのため、 'Feature'クラスの1つでは、継承階層からすべてを集めるメソッドを提供しています。 それは悪いことではありません。何かが実装に依存しない、バージョンに依存しない(2.x/3.xでも)とよく書かれているのであれば、それは厄介なハックとは言えません。 – Mikoskay