从变量调用新对象的方法

时间:2017-09-26 10:28:05

标签: python oop higher-order-functions

我有一个包含列表和一些布尔方法的类。

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

但它看起来像是一个黑客,而且它不太容易理解。有人能指出更好的方式吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您应该能够将方法传递给instance.hof(Cls.flag1)之类的函数,并在内部将其写为if fn(new_obj):,而无需将其作为静态方法。