Python - 是否可以在另一个实例方法中定义一个实例方法?



可以做这样的事情吗?(此语法实际上不起作用(

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()

相关内容

最新更新