Mik*_*kay 1 python inheritance python-3.x
例
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
Run Code Online (Sandbox Code Playgroud)
现在collect_foo(D)
返回[1, 1, 2, 3]
- 1
加倍- D
从中派生出来A
.问题是 - 如何获得独特foo
的.我想到的第一件事是检查属性是否在给定的类中派生或声明 - 是否可能?怎么做?
检查一下
'foo' in c.__dict__
Run Code Online (Sandbox Code Playgroud)
代替
hasattr(c, 'foo')
Run Code Online (Sandbox Code Playgroud)
只有True
在c
自身定义属性时才会产生这种情况.
我相信这会起作用......看看它是否__dict__
属于班级的属性.但是,请确保你真的想先这样做.
例:
if name in cls.__dict__:
# ... your code here ...
pass
Run Code Online (Sandbox Code Playgroud)