2016-08-30 22 views
0

我有一個名爲valueType.py使用在另一個文件中的其他類中定義的定義 - 蟒蛇

文件,它包含以下內容:

class SInt8(ValueType): 
    # Set _format as big endian signed char(1 byte) 
    _format = '>b' 

class UInt8(ValueType): 
    # Set _format as big endian unsigned char(1 byte) 
    _format = '>B' 

class SInt16(ValueType): 
    # Set _format as big endian signed short(2 bytes) 
    _format = '>h' 

class UInt16(ValueType): 
    # Set _format as big endian unsigned short(2 bytes) 
    _format = '>H' 

class SInt32(ValueType): 
    # Set _format as big endian signed int(4 bytes) 
    _format = '>i' 

class UInt32(ValueType): 
    # Set _format as big endian unsigned int(4 bytes) 
    _format = '>I' 

class Real32(ValueType): 
    # Set _format as big endian float(4 bytes) 
    _format = '>f' 

而且我還有一個文件,我們只是把它parser.py。在parser.py中,我定義了一個名爲parameter的對象,該對象具有一個稱爲parameter.values的屬性。

parameter.values包含原始十六進制值,我需要將它們轉換爲十進制格式,我打算使用struct.unpack(fmt, string)。 我的問題是,我怎樣才能使用_formatvalueType.py裏面的定義parser.py

valueType.py導入到parser.py,他們都在同一目錄中

回答

0

簡單,只是做X._format,其中X是你的一個類或它的一個實例

這裏是一個說明性的例子

>>> class Test(object): 
     _format = "test" 


>>> Test._format 
'test' 
>>> t=Test() 
>>> t._format 
'test' 
>>> 

沒有什麼是真正的私人蟒蛇,如果有什麼困擾你是_這是隻有紳士協議說「不要使用它ou這個類/模塊「。但是如果你知道有東西在那裏,你可以使用它。

所以你的情況,這將是例如

#parser.py 
import valueType 
... 
x = struct.unpack(valueType.SInt8._format, parameter.values) 

如果是所有的,也許一本字典是一個更好的選擇

valueType.py

你會使用這些類
formatType = { 
     "SInt8":'>b', 
     "UInt8":'>B', 
     "SInt16":'>h', 
     "UInt16":'>H', 
     "SInt32":'>i', 
     "UInt32":'>I', 
     "Real32":'>f' 
    } 

parser.py

from valueType import formatType 
... 
x = struct.unpack(formatType["SInt8"], parameter.values)  
相關問題