我创建了一个类,如下所示:
class Simon:
name = 'Simon'
@classmethod
def says(cls, sentence):
return '%s says: %s' % (cls.name, sentence)
如果我想坐下:
^{pr2}$为了用另一个名称替换Simon,比如说,Eva,我可以这样子类化它:
class Eva(Simon):
name = 'Eva'
结果是:
>>> Eva.says('stand up')
'Eva says: stand up'
现在我想通过创建一个名为^{
class Eva(Simon):
name = 'Eva'
def to_past_tense(self, func):
def wrapper(*arg, **kw):
present_tense = func(*arg, **kw)
past_tense = present_tense.replace('says', 'said')
return past_tense
return wrapper
@classmethod
def says(cls, *arg, **kw):
return cls.to_past_tense(cls, Simon.says)(*arg, **kw)
如果我这样做:
>>> Eva.says('stand up')
我期待的是:
'Eva said: stand up'
但事实上我得到了这个
'Simon said: stand up'
如何覆盖该值?在
如果标题不准确,请帮助我改进标题,谢谢!在
我不完全确定您要在这里实现什么,但我想您需要将
cls.says
传递给方法:您正在使用
Simon.says
,检索绑定类。在如果要获取重写的类方法,但要将其绑定到当前类,请使用^{} proxy object :
^{pr2}$super()
对象将搜索该类的MRO,在Simon
上找到says
方法,然后为您将其绑定到cls
对象,这样cls.name
值仍然从Eva
查找:相关问题 更多 >
编程相关推荐