python调用所有具有名称模式或其他签名的函数



我正在编写一个可以扩展的特性生成类。例如,在以下示例中,任何以generate开头的方法都是特征生成方法:

class FeatureGenerator:
def __init__(self): 
self.generate_a()
self.generate_b()
def method_a(self): pass
def generate_a(self): do stuffs
def generate_b(self): do stuffs

我想在init中执行所有带有generate前缀的方法。但是,我不想每次编写新方法时都手动添加它。一种解决方案可以是编写一个装饰器,将其添加到列表中,然后在init中执行列表中的所有元素。但我不确定这是个好主意。有什么蟒蛇的方法可以做到这一点吗?

使用实例的dir

class FeatureGenerator:
def __init__(self): 
for name in dir(self):
attr = getattr(self, name)
if callable(attr) and name.startswith("generate"):
attr()
def method_a(self): pass
def generate_a(self): print("gen a")
def generate_b(self): print("gen b")

最新更新