如果我有父类和子类,我想要列出在子类中定义但不从父类继承的所有属性。
注意:我知道我可以从父类中获取所有属性的列表,并从子类获取所有属性并获取交集,但这在我的场景中不起作用。
答案 0 :(得分:1)
您可以使用以下事实:属性的地址与继承的地址不同(等于)。见例:
from __future__ import print_function
class A:
def f(self):
pass
def g(self):
pass
class B:
def f(self):
# overriden
pass
def h(self):
pass
import inspect
a = inspect.getmembers(A)
# print(a)
b = inspect.getmembers(B)
# print(b)
for k, v in b:
if k.startswith('__'):
continue
if k not in a or v != b[k]:
print('Not inherited:', k, v)
打印:
Not inherited: f <function B.f at 0x000002523A3E00D0>
Not inherited: h <function B.h at 0x000002523A3E0158>
如果不使用inspect
模块,则可以使用简单的dir()
。
你需要的不是一个交集,而是一个集合的差异。 并首先过滤掉“魔法”属性。