所以我有一个带有几个(常规)方法的类。根据一个值,我想调用不同的方法。选择方法的这种行为是静态的(对于所有类的实例都是相同的。您将如何建议这样做?
如果实例化的状态是恒定的,并且初始化后再也没有改变,答案是否会以最佳方式实现?
例子:
PLUS = 0
MINUS = 1
OPERATIONS = [PLUS, MINUS]
class Generator(object):
operations = {
PLUS: self.plus, # Not possible
MINUS: self.minus,
}
def __init__(self, state):
self._state = state
def plus(self, a, b):
# Depends on state
return a + b
def minus(self, a, b):
return a - b if self._state else b - a
def generate(self):
a, b = give_me_numbers()
for op in OPERATIONS:
print self.operations[op](a, b)
PLUS = 0
MINUS = 1
OPERATIONS = [PLUS, MINUS]
class Generator:
operations = {}
def __init__(self, state):
self._state = state
@classmethod
def init_operations(cls):
cls.operations = {
PLUS: cls.plus,
MINUS: cls.minus
}
def plus(self, a, b):
# Depends on state
return a + b
def minus(self, a, b):
return a - b if self._state else b - a
def generate(self):
a, b = 5, 10
for op in self.operations:
print( self.operations[op](self, a, b) )
gen = Generator(1)
gen.init_operations()
gen.generate()
为了operations
存储类定义的函数,不能像您所做的那样在类的顶部完成操作。这是因为解析器无法解析您要引用的函数,因为它尚未解析它们。因此,相反,我添加了一个“静态” init_operations()。
请注意,这些操作存储为未绑定的方法(因为它是从静态内部调用的);因此,在调用这些函数时,必须将self
变量作为第一个参数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句