python更新类实例以反映类方法中的更改

2024-06-27 20:49:28 发布

您现在位置:Python中文网/ 问答频道 /正文

当我工作和更新一个类时,我想要一个已经创建的类实例被更新。我该怎么做呢?在

class MyClass:
"""  """

def __init__(self):

def myMethod(self, case):
    print 'hello'

classInstance=MyClass()

我在Maya内部运行Python,然后在软件启动时创建实例。我打电话的时候classInstance.myMethod()即使我换了这个,它也总是印着“你好”。在

谢谢你

/基督教

更完整的例子:

^{pr2}$

mCore=MayaCore()

最后一行在模块文件中(mCore=MayaCore())。 类中有大量的方法,因此我删除了它们以缩短滚动时间:-) 在类的上面也有import语句,但是由于某种原因,它们把格式搞砸了。它们在这里:

from pymel.all import *
import re
from maya import OpenMaya as om
from our_libs.configobj import ConfigObj

if getMelGlobal('float', "mVersion") >= 2011:
   from PyQt4 import QtGui, QtCore, uic
   import sip
   from maya import OpenMayaUI as omui

在Maya中,我们在程序启动时导入该类及其子类:

from our_maya.mayaCore import *

在我们编写的其他工具中,我们调用麦克雷方法()根据需要。 我遇到的一个警告是,当我回去修改mCore方法并且实例调用已经开始时,我必须重新启动Maya,以便所有实例都随着方法更改而更新(它们仍将使用未修改的方法)。在


Tags: 实例方法fromimportselfdefasmyclass
3条回答

好吧,再试一次,但对问题有了新的理解:

class Foo(object):
    def method(self):
        print "Before"

f = Foo()
f.method()
def new_method(self):
    print "After"

Foo.method = new_method
f.method()

将打印

^{pr2}$

这也适用于老式的类。关键是修改类,而不是重写类的名称。在

我的另一个答案回答了您最初的问题,所以我将它留在这里,但是我认为您真正想要的是reload函数。在

import our_maya.mayaCore
reload(our_maya.mayaCore)
from our_maya.mayaCore import *

在更改类定义后执行此操作。你的新方法应该出现并被你的类的所有现有实例使用。在

您必须提供关于您正在做什么的更多细节,但是Python实例不存储方法,它们总是从类中获取方法。因此,如果更改类上的方法,现有实例将看到新方法。在

相关问题 更多 >