【发布时间】:2010-12-11 11:31:36
【问题描述】:
我不太了解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 = 呜呜
我试图用这个来改变 Bar 的 init 方法:
def __init__(self):
self.foo = Foo()
self.foo.showy = showyImp
但我收到以下错误消息:
showyImp() 只接受 1 个参数(给定 0)
是的...我尝试使用setattr(),但似乎与self.foo.showy = showyImp 相同。
有什么线索吗? :)
【问题讨论】:
-
您不使用继承进行此操作是否有特殊原因?
-
是的,因为我对创建的对象的访问权限非常有限。我不是创建它的人(因此不可能继承),并且我无法修改原始对象的代码(也因为无论如何它都没有意义,我只需要在完全不同的上下文中更改方法从对象最初的用途:)。
标签: python