从变量调用新对象的方法

问题描述:

我有一个包含列表和一些布尔方法的类。从变量调用新对象的方法

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 

但它似乎是一个黑客,这不是很容易理解。有人能指出一个更好的方法吗?

谢谢。

+0

你有什么试过,发生了什么?当我在这里的时候,当你说'__init __()'中的类级可变变量被“填充”时,你的意思是“用期望的值替换”,在这种情况下,它可能应该有不同的默认值,以包含所需的值“,在这种情况下,每个实例将具有相同的数据? – mwchase

+0

@mwchase,我的意思是'def __init __(self,value):self.data = value' – pashadia

您应该能够将方法传递到像instance.hof(Cls.flag1)这样的函数中,并且在内部将其写入if fn(new_obj):,而无需将其作为静态方法。

+0

这应该可以工作,不需要像我这样的字典。 – pashadia