如何在 Python 2.7 中查找仅在子类中定义的方法?

wta*_*yeb 5 python methods subclass python-2.7

有没有一种干净的方法来获取仅在父类中未定义的子类中定义的方法?

class Parent(object):
     def method_of_parent(self):
         pass
class SubClass(Parent):
     def method_of_subclass(self):
         pass

# desired:
>>> print(get_subclass_methods(SubClass))
['method_of_subclass',]
Run Code Online (Sandbox Code Playgroud)

Ken*_*chi 3

我认为有很多极端情况,但这是解决方案之一。

import inspect


class Parent(object):
     def method_of_parent(self):
         pass
class SubClass(Parent):
     def method_of_subclass(self):
         pass

def get_subclass_methods(child_cls):
    parents = inspect.getmro(child_cls)[1:]
    parents_methods = set()
    for parent in parents:
        members = inspect.getmembers(parent, predicate=inspect.ismethod)
        parents_methods.update(members)

    child_methods = set(inspect.getmembers(child_cls, predicate=inspect.ismethod))

    child_only_methods = child_methods - parents_methods
    return [m[0] for m in child_only_methods]

print(get_subclass_methods(SubClass))
Run Code Online (Sandbox Code Playgroud)

结果

['method_of_subclass']
Run Code Online (Sandbox Code Playgroud)