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

2024-04-27 00:52:39 发布

您现在位置: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

如果可能的话,这是可怕的编程实践吗?我真正要做的是根据实例的状态调用同一方法的两个变体中的一个(都使用相同的名称和签名)


Tags: selfobjectdef语法thisonemethodclass
1条回答
网友
1楼 · 发布于 2024-04-27 00:52:39

在方法中定义函数不会自动使它对实例可见—它只是一个作用域限定为在方法中存在的函数

为了暴露它,你可能会做:

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

相关问题 更多 >