我有一个包含列表和一些布尔方法的类。
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
有没有办法在不将所有标志变成静态方法的情况下实现这一点?
=== 编辑:以非常黑客的方式使它工作:
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
但它看起来像是一个黑客,而且它不太容易理解。有人能指出更好的方式吗?
感谢。
答案 0 :(得分:0)
您应该能够将方法传递给instance.hof(Cls.flag1)
之类的函数,并在内部将其写为if fn(new_obj):
,而无需将其作为静态方法。