gpt4 book ai didi

python - 如何迭代和过滤对象方法?

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:11 24 4
gpt4 key购买 nike

我正在开发一个 Django 项目,其中有一个模型 Model。

这个模型有它的属性、方法和子类。我想迭代并获取具有“统计”属性的方法。

所以:

class Model(models.Model):
name = ...

def dont_want(self):
return 'foo'

def want(self):
statistic = True
return self.name

def want_too(self):
statistic = True
return self.name

def get_methods_with_statistic_attribute(self):
# WHAT TO DO
return methods


model = Model(name='Peter')
for method in model.get_methods_with_statistic_attribute():
print method

>>> 'Peter'
>>> 'Peter'

可能吗?

我尝试过:

return [a for a in dir(self) if hasattr(getattr(self,a),'statistic')] 

没有成功。

编辑:

这个问题可以解决我在这里问的更具体的 Django 问题:

Django - is it possible to iterate over methods?

最佳答案

这是不可能的,因为在您的示例中,statistic 不是您方法的属性 - 它只是一个仅限于方法范围的变量。换句话说,您的示例等同于以下内容:

def want(self):
# Some code
return

want.statistics = True

这是一个事实上的属性创建,并且getattr()实际上可以工作。

也就是说,无法获取其中包含名为 statistics 的变量的方法列表。

编辑

您可能想要定义一个方法列表,您将在代码的某些特定部分中调用这些方法。也许一个选择是在模型的常量中定义这些方法。

class Model(models.Model):
name = ...
USEFUL_METHODS = ['want', 'want_too']

def dont_want(self):
return 'foo'

def want(self):
statistic = True
return self.name

def want_too(self):
statistic = True
return self.name

# ...

instance = Model()
for method_str in Model.USEFUL_METHODS:
method = getattr(instance, method_str)
method()

关于python - 如何迭代和过滤对象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com