在Python2.7中重新加载类而不杀死obj
我有一个类和该类的一个对象。问题是当我必须在类方法中进行更改时,我必须杀死该对象并启动另一个对象。有没有一种方法可以在不杀死对象的情况下获得修改后的功能在Python2.7中重新加载类而不杀死obj,python,Python,我有一个类和该类的一个对象。问题是当我必须在类方法中进行更改时,我必须杀死该对象并启动另一个对象。有没有一种方法可以在不杀死对象的情况下获得修改后的功能 Class ABC: def abc(): print "Hello I am original text" 我叫全班同学 import ABC obj = ABC() obj.abc() is printing the desired output 如果我想修改方法abc或为类编写一个新方法,我必须重新打开pyt
Class ABC:
def abc():
print "Hello I am original text"
我叫全班同学
import ABC
obj = ABC()
obj.abc() is printing the desired output
如果我想修改方法abc或为类编写一个新方法,我必须重新打开pythonshell并创建一个新的obj
我正在寻找一种方法,在这种方法中,我可以再次重新加载该类,并且同一对象将具有该类的新属性
我正在使用Python2.7,并尝试了一些我得到的东西,比如重新加载(模块)
给予负面评价是可以的,但这应该是有原因的。就像如果你没有答案或者不理解它,你就没有资格给负面评价一样
好的,这里是一个答案
但首先要注意。这样做是个坏主意。通常我会说,编写一个测试套件,编写一个模块,测试模块(硬件不会在一点触碰就爆炸的地方?),然后应用
首先。您还需要functools.partial
策略是编写额外的函数,就好像它们是方法一样,然后将它们修补到对象上。请注意,我使用的是Python3,但这在Python2中应该可以正常工作
我将制作两个模块base_class.py
和new_methods.py
。假设new_methods.py
中的每个方法都是在其他方法之后编写的,需要大量重新加载模块
base_class.py:
class MyClass(object):
def __init__(self):
self.a = 'a'
self.b = 'b'
def show_a(self):
return self.a
新的_methods.py:
def first(obj):
return obj.b
def second(obj):
return obj.a + obj.b
def third(obj, number):
return obj.a + str(number)
口译员:
>>> from base_class import MyClass
>>> x = MyClass()
>>> x.show_a()
'a'
>>> import sys
>>> from functools import partial
>>> import new_methods as nm
>>> x.show_a = partial(nm.first, x)
>>> x.show_a()
'b'
>>> del sys.modules['new_methods'] # wrote some new stuff. want to import
>>> import new_methods as nm
>>> x.show_a = partial(nm.third, x)
>>> x.show_a(5)
'a5'
如果使用这种方法重新加载不起作用,那么上面的答案非常详细,说明了如何进行重新加载。我想您需要的是什么。是不是盖特曼,你读了我的评论,连在一起的问题,它的答案都是在24秒内的?…你试过了吗?我想更重要的问题是你为什么要这样做?