我想在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**
亲切的问候,
昆汀
答案 0 :(得分:4)
您不能“继承”submethod
,因为它method
是本地的,在method
运行之前甚至不存在。
为什么不简单地将其设为A
和B
的顶级方法?
答案 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的命名空间和东西和垃圾是如何工作的。