获取未继承的所有属性的列表

时间:2018-01-16 11:51:14

标签: python inheritance

如果我有父类和子类,我想要列出在子类中定义但不从父类继承的所有属性。

注意:我知道我可以从父类中获取所有属性的列表,并从子类获取所有属性并获取交集,但这在我的场景中不起作用。

1 个答案:

答案 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()

你需要的不是一个交集,而是一个集合的差异。 并首先过滤掉“魔法”属性。