我希望能够使用动态函数名在Python类上调用不同的方法,例如:
class Obj(object):
def A(self, x):
print "A %s" % x
def B(self, x):
print "B %s" % x
o = Obj()
# normal route
o.A(1) # A 1
o.B(1) # B 1
# dynamically
foo(o, "A", 1) # A 1; equiv. to o.A(1)
foo(o, "B", 1) # B 1
什么是"foo"?(或者有其他方法吗?)我确定它一定存在,但我似乎找不到它或记不起它叫什么。我已经查看了内置函数列表中的getattr
、apply
和其他函数。这是一个如此简单的参考问题,但是我还是无法解决!
感谢阅读!
getClass("MyClassName")
然后在这个对象上使用getattr()
方法来获取其中的一个方法? - RPDeshaiesglobals()["MyClass"]
在当前模块的全局范围内查找名称,或者如果它在另一个模块中,则可以使用getattr(some_module, "MyClass")
。话虽如此,在我看来,99%的情况下,当人们将类或变量名称用作数据时,他们的设计存在问题。 - Sven Marnachgetattr(o, "A")(1)
调用从字符串参数调用方法是不好的做法吗? - RPDeshaiesglobals()
和getattr()
都有合理的使用场景,但也经常被滥用。我认为大多数使用globals()
的情况都是值得怀疑的。在使用getattr()
时,永远不要将字符串字面量作为第二个参数--在这种情况下,请使用普通的参数访问方式。 - Sven Marnach