从变量调用新对象的方法
问题描述:
我有一个包含列表和一些布尔方法的类。从变量调用新对象的方法
class Cls:
data = [] // populated in __init__()
def flag1(self):
def flag2(self):
def flag3(self): # these all return booleans, based on the data
我想建立一个更高层次的功能,进行参数的标志之一,在多种方式操纵数据,应用该标志到新的数据,并计算结果的数量。
喜欢的东西:
def hof(self, fn):
count = 0
for i in range(1, 10):
new_obj = Cls(self.data+i)
if new_obj.fn():
count +=1
有没有办法做到这一点不打开所有的标志为静态方法?
=== 编辑:使工作在一个非常hackish的方式:
class Cls:
data = []
def __init__(self):
self.data = value
class flag1(self):
return True
class flag2(self):
return False
# The hackish part
flag_dict = {
1: flag1,
2: flag2,
}
def hof(self, flag):
count = 0
for i in range(1,10):
new_obj = Cls(self.data + [i])
if self.flag_dict[flag](new_obj):
count +=1
return count
但它似乎是一个黑客,这不是很容易理解。有人能指出一个更好的方法吗?
谢谢。
答
您应该能够将方法传递到像instance.hof(Cls.flag1)
这样的函数中,并且在内部将其写入if fn(new_obj):
,而无需将其作为静态方法。
+0
这应该可以工作,不需要像我这样的字典。 – pashadia
你有什么试过,发生了什么?当我在这里的时候,当你说'__init __()'中的类级可变变量被“填充”时,你的意思是“用期望的值替换”,在这种情况下,它可能应该有不同的默认值,以包含所需的值“,在这种情况下,每个实例将具有相同的数据? – mwchase
@mwchase,我的意思是'def __init __(self,value):self.data = value' – pashadia