【发布时间】:2019-12-03 01:29:09
【问题描述】:
假设我有一个充当方法容器的类。我有一个在字典中列出这些方法的配置文件。在一个程序中,我想从配置中导入字典并对其进行迭代,同时调用该类中的方法。
问题是,如果方法是一种,我需要以一种方式处理它们,如果是另一种方式,我需要以另一种方式处理它们。所以容器类看起来像:
class Circus(object):
def clown(self):
return print("*HONK*")
def lion(self):
return print("roar")
def __call__(self):
setattr(clown, 'isFunny', True)
setattr(lion, 'isFunny', False)
我的配置文件:
circus = {
'funny_thing': Circus.clown,
'unfunny_thing': Circus.lion
}
还有实际的脚本:
for item in circus.items():
if item[1].isFunny == True:
item()
我已经忘记了我尝试过的所有内容,但它包括将其分为两个类并在每个类中创建一个 isFunny() 方法(返回真或假),将事物分配给类 __dict__,放置 setattr()在不同的地方,使用 __init__、@staticmethod 和 @classmethod。
我期望的是一个简单的*HONK*,但大多数情况下都会输出一个AttributeError: 'function' object has no attribute 'isFunny'。
我做错了什么?
作为参考,我尝试过的一些链接:
【问题讨论】:
-
但是你为什么要将这些属性添加到方法中呢?为什么不将它们添加到 objects 本身,然后所有方法都可以访问它们
-
这与我在现实生活中的实现方式、配置文件和所有内容有关。截止日期太近了,现在无法重写所有内容,但我愿意学习最佳实践。
标签: python class methods attributes