作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有一个特定类型的对象,并且我想获得未绑定(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/
我是一名优秀的程序员,十分优秀!