首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中,如何在重新加载后更改实例化的对象?

在Python中,如何在重新加载后更改实例化的对象?
EN

Stack Overflow用户
提问于 2009-07-03 20:03:08
回答 7查看 11K关注 0票数 15

假设您有一个从模块内的类实例化的对象。现在,重新加载该模块。您想要做的下一件事是使重载影响该类。

代码语言:javascript
复制
mymodule.py
---
class ClassChange():
    def run(self):
        print 'one'

myexperiment.py
---
import mymodule
from mymodule import ClassChange  # why is this necessary?
myObject = ClassChange()
myObject.run()
>>> one
### later, i changed this file, so that it says print 'two'

reload(mymodule)
# trick to change myObject needed here
myObject.run()
>>> two

您是否必须创建一个新的ClassChange对象,将myObject复制到该对象中,然后删除旧的myObject?或者有没有更简单的方法?

Edit: run()方法看起来像是一种静态的类样式方法,但这只是为了简洁。我希望run()方法对对象内部的数据进行操作,因此静态模块函数不能...

EN

Stack Overflow用户

发布于 2009-07-03 20:24:14

下面的代码做了你想要的,但是请不要使用它,(至少在你确定你做的是正确的事情之前不要),我把它贴出来只是为了解释的目的

mymodule.py:

代码语言:javascript
复制
class ClassChange():
    @classmethod
    def run(cls,instance):
        print 'one',id(instance)

myexperiment.py:

代码语言:javascript
复制
import mymodule

myObject = mymodule.ClassChange()
mymodule.ClassChange.run(myObject)

# change mymodule.py here

reload(mymodule)
mymodule.ClassChange.run(myObject)

在代码中使用实例化myObject时,将获得ClassChange的一个实例。此实例有一个名为run实例方法。即使在重载时,对象也会保留这个实例方法(原因由nosklo解释),因为重载只会重载类ClassChange

在上面的代码中,run是一个类方法。类方法总是绑定到类,并在类上操作,而不是实例(这就是为什么它们的第一个参数通常被称为cls,而不是self)。Wenn ClassChange被重载,这个类方法也被重载。

您可以看到,我还将该实例作为参数传递,以使用正确的(相同的) ClassChange实例。您可以看到这一点,因为在这两种情况下都打印了相同的对象id。

票数 2
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1080669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档