在Python中继承一个sub方法

时间:2011-12-02 14:28:45

标签: python inheritance methods

我想在python中继承一个方法的'submethod'。有人可以帮我弄明白怎么做吗?

我想做的例子:

 class A(object):
    def method(self, val):
        def submethod():
            return "Submethod action"
        if not val:
            return submethod()  
        return "Method action"


a = A()

class B(A):
    def method(self, val):
        #inherit submethod ?        
        def submethod():
            return "Another submethod action"

        return super(B,self).method(val)

b = B()
print "A : "
print a.method(True)
>> Method action
print a.method(False)
>> Submethod action
print "B : "
print b.method(True)
>> Method Action
print b.method(False)
Actual answer : 
>> Submethod Action
**Wanted answer : 
>> Another submethod action**

亲切的问候,

昆汀

2 个答案:

答案 0 :(得分:4)

您不能“继承”submethod,因为它method是本地的,在method运行之前甚至不存在。

为什么不简单地将其设为AB的顶级方法?

答案 1 :(得分:2)

这称为闭包(函数中的函数),并且不像你所要求的那样。因为函数不像类,所以它们没有“实例”的概念,因此函数内部的任何对象都不能从外部访问,除非函数return

注意,在Python中,方法本质上是绑定到类的函数。

这将是一个更好的模式:

class A(object):
    def method(self, val):
        if not val:
            return self.submethod()
        return "Method action"

    def submethod():
        return "Submethod action"

您可以访问闭包的内部状态,但它与您正在考虑的属性样式访问不同。最好避免使用它们,直到你完全理解Python的命名空间和东西和垃圾是如何工作的。