[英]Overriding method of a class instance in Python
我有一个未知 class 的实例bear
,其方法size
返回一个数字。 例如:
bear.size()
会做一些计算并返回一个数字,比方说 3。
我想重写这个方法,所以无论它是哪个数字,它都会返回 double,所以bear.size()
将返回 6。
当我尝试实现它时,出现递归错误,因为新方法会调用自身。 所以当我运行时:
from types import MethodType
class Animal():
def size(self):
return 3
bear = Animal()
def new_size(self):
return self.size() * 2
bear.size() # returns 3.
bear.size = MethodType(new_size, bear)
bear.size() # should return 6.
我得到RecursionError: maximum recursion depth exceeded
。 我应该如何覆盖该方法?
谢谢!
您可以将旧的实现隐藏在实例上,以便您可以在覆盖的版本中调用它。
from types import MethodType
class Animal:
def size(self):
return 3
bear = Animal()
def new_size(self):
return self._old_size() * 2
bear.size() # returns 3.
bear._old_size = bear.size
bear.size = MethodType(new_size, bear)
print(bear.size()) # should return 6.
或者,使用self
调用未绑定的原始方法:
from types import MethodType
class Animal:
def size(self):
return 3
bear = Animal()
def new_size(self):
return Animal.size(self) * 2
bear.size() # returns 3.
bear.size = MethodType(new_size, bear)
print(bear.size()) # should return 6.
除了@AKX 解决方案,您还可以使用装饰并装饰您的 function:
def double_size(fn):
def wrapper():
return fn() * 2
return wrapper
bear.size()
bear.size = double_size(bear.size)
bear.size()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.