2014-09-26 26 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

相關問題