gpt4 book ai didi

python - 如何更新现有对象中的类类型和方法

转载 作者:行者123 更新时间:2023-11-28 22:38:19 26 4
gpt4 key购买 nike

如果我有一个特定类型的对象,并且我想获得未绑定(bind)的方法,我应该使用 type(obj).method_name 还是 obj.__class__.method_name?看到下面的结果我很困惑:

class ClassA(object):
def Test(self):
pass

obj_a = ClassA()

print obj_a.__class__ is type(obj_a)
print obj_a.__class__.Test is type(obj_a).Test

第一个返回 True,第二个返回 False。那么最后的说法两者有什么区别呢?

更新:

我的用例是我在 playground notebook 中上课。类对象可能很重,例如,它们包含经过长时间训练后的东西。在此期间,我想更新功能并继续使用现有对象。所以我希望这样的事情能起作用:

# In cell 1 I define the following class.
class ClassA(object):
def Test(self):
print 'haha'

# In cell 2 I create an object and use it for a while.
obj_a = ClassA()
obj_a.Test()

# After some time I modified the ClassA in cell 1 and re-executed the cell:
class ClassA(object):
def Test(self):
print 'hoho'

# Then I want to replace a method and call Test again:
obj_a.__class__.Test = ClassA.Test
obj_a.Test() # Should print 'hoho'

不幸的是,上面的代码不起作用。最后一次调用 obj_a.Test() 使用未绑定(bind)方法 Test

最佳答案

你的问题的答案,你需要赋值给绑定(bind)的方法,例如:

import types
obj_a.Test = types.MethodType(ClassA.Test, obj_a)
obj_a.Test()

会给出您期望的结果,即 'hoho'

已更新:这是一个示例:

import types

class ClassA(object):
def Test(self):
print 'haha'

obj = ClassA()
obj.Test()
# haha

将 ClassA 更新为 hoho:

obj.__class__ = ClassA
obj.Test()
# hoho

关于python - 如何更新现有对象中的类类型和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35679437/

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