【发布时间】:2019-08-18 08:28:40
【问题描述】:
我有两个继承自同一个基类的类,它们有一些共同的方法(实际上是属性)。我需要这样做:
输入:一个 int 和一个来自任一类的对象;
输出:对应类的方法之一(由int确定)的结果。
我想我可以使用字典来做到这一点,如下代码:
class ChangeInt(object):
def bar(self, i):
print(i)
class PlusOne(ChangeInt):
def bar(self, i):
print(i+1)
class PlusTwo(ChangeInt):
def bar(self, i):
print(i+2)
methods_dict = {0:ChangeInt.bar}
print(methods_dict[0](PlusOne(), 0))
print(methods_dict[0](PlusTwo(), 0))
我希望输出是 1,2,但实际上我得到了这个:
0
None
0
None
我想知道这些结果是如何产生的,我应该怎么做才能修复它。提前致谢。
我完全搞乱了评论中的格式,所以我将它粘贴在这里。 感谢Dynamic Method Call In Python 2.7 using strings of method names 的 Ryan Haining,我找到了另一种方法:
class ChangeInt(object):
def bar(self, i):
print(i)
class PlusOne(ChangeInt):
def bar(self, i):
print(i+1)
class PlusTwo(ChangeInt):
def bar(self, i):
print(i+2)
methods_dict = {0:'bar'}
getattr(PlusOne(), methods_dict[0])(0)
getattr(PlusTwo(), methods_dict[0])(0)
【问题讨论】:
标签: python-2.7