这与这个问题有关,但是那里描述的方法不起作用。
我有一个特定的类
Dog
,带有方法 woofwoof
和属性 woof
。还有第二种方法 bark
,它返回 woofwoof()
。 对于给定的Dog
实例,我想重新定义bark
,以便它返回woof
的值。重要的是,bark
必须保留一个方法,因为下游代码依赖于调用bark
。
请参阅下面的最小工作示例。
class Dog:
woof = 'woof'
def woofwoof(self):
return 'woof woof'
def woOof(self):
return 'woOof'
def bark(self):
return self.woofwoof()
def test(foo):
print(type(foo.bark))
print(foo.bark())
foo = Dog()
test(foo)
foo.bark = foo.woOof
test(foo)
foo.bark = foo.woof
test(foo)
上面的代码产生:
<class 'method'>
woof woof
<class 'method'>
woOof
<class 'str'>
TypeError: 'str' object is not callable
但是我想要最后两行的输出是:
<class 'method'>
woof
那就是保留
bark
的类型作为方法,但让它返回属性 woof
的值(特别是这样,如果我稍后更改 woof
的值,bark
将返回更新后的值)打电话)。
定义一个返回
self.woof
的方法,并将其分配给 foo.bark
。
class Dog:
woof = 'woof'
def woofwoof(self):
return 'woof woof'
def woOof(self):
return 'woOof'
def bark(self):
return self.woofwoof()
def returnWoof(self):
return self.woof
foo = Dog()
foo.bark = foo.returnWoof
test(foo)