gpt4 book ai didi

python - 动态更新的实例类方法在被另一个类方法调用时抛出错误

转载 作者:行者123 更新时间:2023-11-28 18:53:18 24 4
gpt4 key购买 nike

我想我的例子会让这更容易理解:

class x():
def a(self):
return "hello"
def b(self):
return self.a() + " world"

test = x()
print test.b() # prints "hello world" as expected

test.a = lambda(self): "hola"
print test.b() # throws error:
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 5, in b
# TypeError: <lambda>() takes exactly 1 argument (0 given)

尝试更新以将 x().a 指向另一个函数,但是当 x().b 调用它时,它似乎没有将 self 作为第一个参数传递。

我希望得到“hola world”。

最佳答案

如果你这样做,你可以看到问题

print type(test.a)  # <type 'function'>
print type(test.b) # <type 'instancemethod'>

如果你真的想只在 test 上修补 a(而不是在 x 的所有实例上),你可以这样做:

import types
test.a = types.MethodType((lambda self: "hola"), test, x)

创建instancemethod类型的对象。

关于python - 动态更新的实例类方法在被另一个类方法调用时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com