从变量调用新对象的方法
Call a method on a new object from a variable
我有一个 class 包含一个列表和一些布尔方法。
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
不过好像是hack,不太明白。有人能指出更好的方法吗?
谢谢。
您应该能够像 instance.hof(Cls.flag1)
一样将方法传递给函数,并在内部将其写为 if fn(new_obj):
,无需将其设为静态方法。
我有一个 class 包含一个列表和一些布尔方法。
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
不过好像是hack,不太明白。有人能指出更好的方法吗?
谢谢。
您应该能够像 instance.hof(Cls.flag1)
一样将方法传递给函数,并在内部将其写为 if fn(new_obj):
,无需将其设为静态方法。