【问题标题】:Python - Is it possible to define an instance method inside another instance method?Python - 是否可以在另一个实例方法中定义一个实例方法?
【发布时间】:2018-05-09 23:41:29
【问题描述】:

有可能做这样的事情吗? (这个语法实际上不起作用)

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

如果可能的话,这是一种糟糕的编程习惯吗?我真正想做的是根据实例的状态调用同一方法的两个变体之一(都具有相同的名称和签名)。

【问题讨论】:

  • 不清楚你想要什么,但是不,这是不可能的。 dynamically_defined_method 只是 method 主体的局部函数,而不是 TestClass 的方法。

标签: python oop methods


【解决方案1】:

在方法中定义函数不会自动使其对实例可见——它只是一个作用于方法中的函数。

为了暴露它,你会很想这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多