我有一个名为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 :(得分: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)