Python對象並不是真的那樣工作。函數實際上與實例(或綁定)方法不同。有一對夫婦的事情,你可以做,但我不一定會推薦例如:
import types # needed for assigning it to a method type
class foo:
def __init__(self, i):
self.i = i
a = foo(7)
b = foo(3)
def bar(self):
return self.i
vars = dict(globals())
vars.update(locals())
for var in vars:
if isinstance(vars[var], foo):
vars[var].bar = types.MethodType(bar, vars[var])
print(a.bar()) # => 7
print(b.bar()) # => 3
然而,這顯然是一個創可貼,並沒有解決真正的問題。一旦你創建了一個類的實例,它只能改變這麼多。 INSTANCE可以改變,但它不會一次影響所有實例,除非您覆蓋某些數據。例如,我可以做foo.i = 100
,然後a.i
和b.i
都是100.但是,這似乎並不是你想要的。
東西勝負的接近可能的,但可以更好地突出這個問題:
class foo:
def __init__(self, i):
self.i = i
a = foo(7)
b = foo(3)
def bar(self):
return self.i
foo.bar = types.MethodType(bar, a)
print(a.bar()) # => 7
print(b.bar()) # => 7
foo.bar = types.MethodType(bar, b)
print(a.bar()) # => 3
print(b.bar()) # => 3
foo.bar = types.MethodType(bar, foo)
print(a.bar()) # => AttributeError: class foo has no attribute 'i'
做'Dog.bark = ...',而不是'a.bark = ...' – inspectorG4dget
@ inspectorG4dget :你應該發佈這個答案。 – tjohnson
噢...我很抱歉問這個問題:D我可以猜出解決方案... – NoAbL