Rei*_*ica 93 python overriding class class-method
请考虑以下代码:
class Base(object):
@classmethod
def do(cls, a):
print cls, a
class Derived(Base):
@classmethod
def do(cls, a):
print 'In derived!'
# Base.do(cls, a) -- can't pass `cls`
Base.do(a)
if __name__ == '__main__':
d = Derived()
d.do('hello')
> $ python play.py
> In derived!
> <class '__main__.Base'> msg
Run Code Online (Sandbox Code Playgroud)
从Derived.do
,我该如何打电话Base.do
?
super
如果这是一个普通的对象方法,我通常会直接使用甚至是基类名,但显然我找不到在基类中调用classmethod的方法.
在上面的例子中,Base.do(a)
print Base
类而不是Derived
类.
Dav*_*d Z 111
如果您使用的是新式类(即从object
Python 2 派生,或者总是在Python 3中派生),您可以这样做super()
:
super(Derived, cls).do(a)
Run Code Online (Sandbox Code Playgroud)
这就是如何print cls, a
从派生类调用基类的方法版本(即)中的代码,并将cls
其设置为派生类.
Nik*_*las 14
这已经有一段时间了,但我想我可能已经找到了答案.当您将方法修饰为类方法时,原始的未绑定方法存储在名为"im_func"的属性中:
class Base(object):
@classmethod
def do(cls, a):
print cls, a
class Derived(Base):
@classmethod
def do(cls, a):
print 'In derived!'
# Base.do(cls, a) -- can't pass `cls`
Base.do.im_func(cls, a)
if __name__ == '__main__':
d = Derived()
d.do('hello')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38998 次 |
最近记录: |