Lorsque je travaille et met à jour une classe, je souhaite qu'une instance de classe déjà créée soit mise à jour. Comment vais-je faire cela?Instance de classe de mise à jour python pour refléter le changement dans une méthode de classe
class MyClass:
""" """
def __init__(self):
def myMethod(self, case):
print 'hello'
classInstance = MyClass()
Je lance Python à l'intérieur de Maya et sur le logiciel démarrer l'instance est créée. Quand j'appelle classInstance.myMethod(), il affiche toujours 'bonjour' même si je change cela.
Merci,
/Christian
exemple plus complet:
class MayaCore:
'''
Super class and foundational Maya utility library
'''
def __init__(self):
""" MayaCore.__init__(): set initial parameters """
#maya info
self.mayaVer = self.getMayaVersion()
def convertToPyNode(self, node):
"""
SYNOPSIS: checks and converts to PyNode
INPUTS: (string?/PyNode?) node: node name
RETURNS: (PyNode) node
"""
if not re.search('pymel', str(node.__class__)):
if not node.__class__ == str and re.search('Meta', str(node)): return node # pass Meta objects too
return PyNode(node)
else: return node
def verifyMeshSelection(self, all=0):
"""
SYNOPSIS: Verifies the selection to be mesh transform
INPUTS: all = 0 - acts only on the first selected item
all = 1 - acts on all selected items
RETURNS: 0 if not mesh transform or nothing is selected
1 if all/first selected is mesh transform
"""
self.all = all
allSelected = []
error = 0
iSel = ls(sl=1)
if iSel != '':
if self.all: allSelected = ls(sl=1)
else:
allSelected.append(ls(sl=1)[0])
if allSelected:
for each in allSelected:
if nodeType(each) == 'transform' and nodeType(each.getShape()) == 'mesh':
pass
else: error = 1
else: error = 1
else: error = 1
if error: return 0
else: return 1
mCore = MayaCore()
La dernière ligne est à l'intérieur du fichier module (mCore = MayaCore ()). Il y a des tonnes de méthodes dans la classe donc je les ai enlevées pour raccourcir le défilement :-) Il y a aussi des instructions d'import au dessus de la classe mais elles bousillent la mise en forme pour une raison quelconque. Ici, ils sont:
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
intérieur Maya, nous importons cela et sous-classes de cette classe de début du programme:
from our_maya.mayaCore import *
Dans d'autres outils que nous écrivons, nous appelons alors mCore.method() sur un besoin base. La mise en garde que je rencontre est que lorsque je vais modifier la méthode mCore et que l'appel d'instance est déjà en cours, je dois redémarrer Maya pour que toutes les instances soient mises à jour avec le changement de méthode (elles utiliseront toujours le méthode non modifiée).
Y a-t-il une raison spécifique pour laquelle vous mettez 'myMethod' dans' __init__'? –
Vous devez toujours placer quelque chose dans le bloc 'def __init __ (self)', sinon vous aurez des problèmes. – nmichaels
Je ne veux pas que les méthodes s'exécutent quand j'exemple la classe.J'utilise la classe dans un package 3d et les méthodes de classe sont exécutées selon les besoins, mais j'instancie la classe lors de l'importation dans le package 3d. – Christian