gpt4 book ai didi

python - 是否可以在不更改同一类的所有其他实例的情况下更改实例的方法实现?

转载 作者:IT老高 更新时间:2023-10-28 20:43:01 25 4
gpt4 key购买 nike

我不太了解python(以前从未使用过:D),但我似乎无法在网上找到任何东西。也许我只是没有用谷歌搜索正确的问题,但我走了:

我想更改实例对特定方法的实现。当我搜索它时,我发现你可以做到,但它改变了同一类的所有其他实例的实现,例如:

def showyImp(self):
print self.y

class Foo:
def __init__(self):
self.x = "x = 25"
self.y = "y = 4"

def showx(self):
print self.x

def showy(self):
print "y = woohoo"

class Bar:
def __init__(self):
Foo.showy = showyImp
self.foo = Foo()

def show(self):
self.foo.showx()
self.foo.showy()

if __name__ == '__main__':
b = Bar()
b.show()
f = Foo()
f.showx()
f.showy()

这没有按预期工作,因为输出如下:

x = 25

y = 4

x = 25

y = 4

我希望它是:

x = 25

y = 4

x = 25

y = woohoo

我试图用这个来改变 Bar 的 init 方法:

def __init__(self):
self.foo = Foo()
self.foo.showy = showyImp

但我收到以下错误消息:

showyImp() takes exactly 1 argument (0 given)

所以是的...我尝试使用 setattr(),但似乎与 self.foo.showy = showyImp 相同。

有什么线索吗? :)

最佳答案

从 Python 2.6 开始,你应该使用 types 模块的 MethodType 类:

from types import MethodType

class A(object):
def m(self):
print 'aaa'

a = A()

def new_m(self):
print 'bbb'

a.m = MethodType(new_m, a)

然而,正如另一个答案所指出的,这不适用于新型类的“魔术”方法,例如 __str__()

关于python - 是否可以在不更改同一类的所有其他实例的情况下更改实例的方法实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647586/

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