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
我需要編寫大約一百個類,其中許多類將具有諸如「Class1(Feature1,Feature2)」或「Class2(Feature2,Feature1337)」等特徵的特定組合。事情是有一些屬性,我不想被覆蓋,但混入並可用於派生類 - 所以'Feature'類之一提供了從繼承層次結構收集它們的方法。這並不是什麼壞事 - 如果某些東西是獨立於實現的,與版本無關的(甚至是2.x/3.x),並且有很好的文檔記錄,我不會稱之爲討厭的黑客攻擊。 – Mikoskay