假设Python类具有不同的方法,并且根据用户指定的内容,在主函数calculate()
中执行不同的方法。
在下面的示例中,用户需要指定关键字参数'methodOne'
或'methodTwo'
。如果未指定或关键字不正确,则默认为'methodOne'
。
class someClass(object):
def __init__(self,method=None):
methodList = ['methodOne','methodTwo']
if method in methodList:
self.chosenMethod = method
else:
self.chosenMethod = self.methodOne
def methodOne(self):
return 1
def methodTwo(self):
return 2
def calculate(self):
return self.chosenMethod()
由于method
是字符串而不是函数,因此上述情况显然不起作用。如何根据关键字参数self.methedOne()
选择self.methedOne()
或method
?原则上,以下工作:
def __init__(self,method=None):
if method == 'methodOne':
self.chosenMethod = self.methodOne
elif method == 'methodTwo':
self.chosenMethod = self.methodTwo
else:
self.chosenMethod = self.methodOne
但如果我有两种以上的方法,那就变得相当难看了。有没有办法像我原来的代码那样做?
答案 0 :(得分:1)
您可以使用getattr
获取类对象的实际方法。
class someClass(object):
def __init__(self,method=None):
# store it with the object so we can access it later in calculate method
self.method = method
def methodOne(self):
return 1
def methodTwo(self):
return 2
def calculate(self):
# get the actual method from the string here
# if no such method exists then use methodOne instead
return getattr(self, self.method, self.methodOne)()
> someClass('methodOne').calculate()
# 1
> someClass('methodTwo').calculate()
# 2
答案 1 :(得分:1)
您可以将getattr()
用于此目的:
class someClass(object):
def __init__(self,method=None):
methodList = ['methodOne','methodTwo']
if method in methodList:
self.chosenMethod = method
else:
self.chosenMethod = self.methodOne
def methodOne(self):
return 1
def methodTwo(self):
return 2
def calculate(self):
return getattr(self, self.chosenMethod)()
x = someClass(method='methodOne')
print x.calculate()
>>> 1