2014-09-26 67 views
1

我试图从一个类中使用一个变量 - fileImporter从类中使用变量到另一个类

但是我与# AttributeError: 'CustomNodeTranslator' object has no attribute 'camName' #我使用了类似的错误提示 - CustomNodeTranslator,并有该变量在另一个类中使用方法在另外两个类中,除了这两个类外,它正在工作。

难道是因为CustomNodeTranslator是一种特殊情况吗?看到它被用于插件?

请给我建议。

谢谢。

class CustomNodeTranslator(OpenMayaMPx.MPxFileTranslator): 
    def __init__(self): 
     OpenMayaMPx.MPxFileTranslator.__init__(self) 
    ... 
    ... 

    def reader(self, fileObject, optionString, accessMode): 
     try:   
      fullPath = fileObject.fullName() 

      self.fileHandle = open(fullPath,"r") 
      camHandle = self.fileHandle 

      camBaseName = os.path.basename(camHandle.name) 
      camName = os.path.splitext(camBaseName)[0] 
      self.camName = camName 

class fileImporter(): 
    def __init__(self, order): 

     test = CustomNodeTranslator() 

     cameraName, cameraShape = cmds.camera(n=str(test.camName)) 
     camSel.extend((cameraName, cameraShape)) 

     cmds.scale(0.5, 0.5, 0.5) 


     camBaseName = os.path.basename(camHandle.name) 
     camName = os.path.splitext(camBaseName)[0] 
     self.camName = camName 
+1

'test.camName'只会在'test.reader(...)'被调用后分配,因为它不会在'__init__'中被赋值。 – jonrsharpe 2014-09-26 10:18:41

+0

@jonrsharpe所以我认为,除非我在'__init__'中赋值,否则不可能调用任何其他函数? – dissidia 2014-09-29 02:13:24

+1

目前还不清楚你在问什么。任何需要在'reader'中首次分配的两个属性('fileHandle'和'camName')的情况,如果尚未调用该方法,将会失败。 – jonrsharpe 2014-09-29 07:27:34

回答

1

不创建在__init__方法的类属性,所以当然的--here--

test = CustomNodeTranslator() 
# -- here -- 
cameraName, cameraShape = cmds.camera(n=str(test.camName)) 

它尚不可见。可以在init中分配它,也可以在类接口上放置一个属性引用。 More in the doc.

UPDATE:你应该声明它在CustomNodeTranslator类你已经创建后

class CustomNodeTranslator(OpenMayaMPx.MPxFileTranslator): 
    def __init__(self): 
     self.camName = "" 
     .... 
+0

嗨,我的noobness赦免了,但是你的意思是什么? – dissidia 2014-09-26 11:01:28

+0

'camName'在'CustomNodeTranslator'中首次声明时变成'available',所以在实例化之后('CustomNodeTranslator ()')还没有它,只有当你第一次调用'reader'时,你才会有它,我的建议就是在'__init__'中声明它,就像'self.camName =“”'一样。方法。 – 2014-09-26 11:24:30

+0

所以我试着在'__init__'声明'self.camName =“”'我仍然得到这个错误:'#AttributeError:type object'CustomNodeTranslator'没有属性'camName'#' – dissidia 2014-09-29 02:25:05

0

场只存在。

test = CustomNodeTranslator() 
# at this point test only has fields that are either introduced in 
# the __init__ 
# or in the class body (like methods) 
# calling reader with proper arguments will create the field 

test.reader(fileObject, optionString, accessMode) 
print test.camName 
+0

它似乎给了我更多的问题,例如'#NameError:全局名'fileObject'未定义#'但是无论如何感谢 – dissidia 2014-09-29 10:20:08

+0

@dissidia :是的 - 你必须在之前的某个地方定义它们。 – mkorpela 2014-09-30 04:47:57