可以做这样的事情吗?(此语法实际上不起作用(
class TestClass(object):
def method(self):
print 'one'
def dynamically_defined_method(self):
print 'two'
c = TestClass()
c.method()
c.dynamically_defined_method() #this doesn't work
如果可能的话,这是糟糕的编程实践吗?我真正想做的是调用同一方法的两个变体之一(都具有相同的名称和签名(,具体取决于实例的状态。
在方法中定义函数不会自动使其对实例可见 - 它只是一个作用域为存在于方法中的函数。
要暴露它,你会很想做:
self.dynamically_defined_method = dynamically_defined_method
只是这不起作用:
TypeError: dynamically_defined_method() takes exactly 1 argument (0 given)
您必须将函数标记为方法(我们使用 MethodType 来执行此操作(。 因此,实现此目的的完整代码如下所示:
from types import MethodType
class TestClass(object):
def method(self):
def dynamically_defined_method(self):
print "two"
self.dynamically_defined_method = MethodType(dynamically_defined_method, self)
c = TestClass()
c.method()
c.dynamically_defined_method()