列出给定类的所有方法,不包括Python中父类的方法

2024-03-28 21:54:10 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一些奇怪的重写检查,我正在寻找一种方法来获取一个对象的方法列表,其中排除了父类的方法。鉴于此:

class Parent: 
  def __init__(self):
    pass
  def papa(self): 
    pass
  def mama(self): 
    pass
class Son(Parent): 
  def __init__(self):
    pass
  def papa(self): 
    pass
  def child(self):
    pass

我想要一个函数list_subclass_methods(cls,is_narrow),它接收类符号并返回: ['child'] 如果提供了标志is_narrow=True,或者 ['__init__','papa','child'] 如果is_narrow=False

多重继承可能是一个问题-因此在多个父对象的情况下,我们将其与父对象方法的并集进行比较

谢谢你的帮助!你知道吗


Tags: 对象方法selfchild列表initisdef
1条回答
网友
1楼 · 发布于 2024-03-28 21:54:10

下面是一个尝试:

import itertools
def listMethods(cls):
    return set(x for x, y in cls.__dict__.items()
                 if isinstance(y, (FunctionType, classmethod, staticmethod)))

def listParentMethods(cls):
    return set(itertools.chain.from_iterable(
        listMethods(c).union(listParentMethods(c)) for c in cls.__bases__))

def list_subclass_methods(cls,is_narrow):
    methods = listMethods(cls)
    if  is_narrow:
        parentMethods = listParentMethods(cls)
        return set(cls for cls in methods if not (cls in parentMethods))
    else:
        return methods

解释:

listParentMethods是一个递归函数,它获得父方法的并集。你知道吗

相关问题 更多 >