2016-08-30 3 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). Вопрос в том, как я могу использовать определение _format в valueType.py внутри parser.py?

valueType.py импортируется в parser.py, и они находятся в той же директории

ответ

0

просто, сделать X._format где X представляет один из ваших классов или экземпляр этого

здесь является показательным примером

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


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

ничто на самом деле не является частным в python, если вас беспокоит _, что является только джентльменским соглашением, говорящим «», не используйте его это класс/модуль ". Но если вы знаете, что что-то там, вы можете его использовать.

Так что в вашем случае это будет, например,

#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)  
Смежные вопросы