在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秒内的?…你试过了吗?我想更重要的问题是你为什么要这样做?