C结构到Python类还是dict?
我听说并读到,使用C语言定义的类结构(见下面的C代码)定义大量信息很容易 我想使用Python以类似的方式定义。我在代码方面不需要什么帮助,我是Python的新手组 关于哪种方式更容易定义,有什么建议吗?用C结构到Python类还是dict?,python,dictionary,Python,Dictionary,我听说并读到,使用C语言定义的类结构(见下面的C代码)定义大量信息很容易 我想使用Python以类似的方式定义。我在代码方面不需要什么帮助,我是Python的新手组 关于哪种方式更容易定义,有什么建议吗?用dict可以,但class最好 下面的C代码示例(我还有其他类似的结构和信息): typedef结构 { U16-ID; S8名称[32]; S8说明[96]; S8单位[16]; 枚举类型; F32标度; F32偏移量; 布尔可写; }斯丹福; /*ID、名称、描述、单位、类型、缩放、偏移、
dict
可以,但class
最好
下面的C代码示例(我还有其他类似的结构和信息):
typedef结构
{
U16-ID;
S8名称[32];
S8说明[96];
S8单位[16];
枚举类型;
F32标度;
F32偏移量;
布尔可写;
}斯丹福;
/*ID、名称、描述、单位、类型、缩放、偏移、可写*/
SDatanfo数据项[]=
{
0x0202,“故障诊断码数量”,故障诊断码数量“,u8,1,0,FALSE,
0x2007,“FlBodyVertLocSel\u A\u测量”,“FL垂直加速度”,“m/s^2”,s16,0.05,0,假,
0x2008,“FrBodyVertLocSel\u A\u Meas\u”,“FR垂直加速度”,“m/s^2”,s16,0.05,0,假,
0x2022,“RlBodyVertLocSel\u A\u测量”,“RL垂直加速度”,“m/s^2”,s16,0.05,0,假
}
重要的是要知道上面的每一条代码都可以在Python中更改。在任何在线连锁店中,上述问题均未得到回答
还有一些例子。正如我在评论中所说,我不确定你到底想要什么……但这里有一个猜测:
from pprint import pprint
import sys
def sprintf(format, *args):
return format % args
def _attributes_from_dict(d):
self = d.pop('self')
for n, v in d.items():
setattr(self, n, v)
class DataInfo(object):
fieldnames = 'id, name, description, units, type, scaling, offset, writeable'.split(', ')
def __init__(self, id, name, description, units, type, scaling, offset, writeable):
_attributes_from_dict(locals())
def __repr__(self): # optional
values = tuple(getattr(self, fieldname) for fieldname in self.fieldnames)
id = values[0]
remainder = ', '.join(map(repr, values[1:]))
return sprintf('%s(0x%04x, %s)', self.__class__.__name__, id, remainder)
u8, s16 = 0, 1 # enum eType names and values
data_items = [
DataInfo(*args) for args in [
(0x0202, "dtc_num_of_faults_", "Number of DTCs", "", u8, 1, 0, False),
(0x2007, "FlBodyVertLocSel_A_Meas_", "FL Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
(0x2008, "FrBodyVertLocSel_A_Meas_", "FR Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
(0x2022, "RlBodyVertLocSel_A_Meas_", "RL Vertical Acceleration", "m/s^2", s16, 0.05, 0, False),
]
]
pprint(data_items)
输出:
[数据信息(0x0202,“故障诊断码数量”、“故障诊断码数量”、“0、1、0、错误”),
数据信息(0x2007,'FlBodyVertLocSel_A_Meas_'FL垂直加速度,'m/s^2',1,0.05,0,False),
数据信息(0x2008,'FrBodyVertLocSel_A_Meas_'FR垂直加速度,'m/s^2',1,0.05,0,False),
数据信息(0x2022,'RlBodyVertLocSel_A_测量','RL垂直加速度','m/s^2',1,0.05,0,假)]
@martineau,谢谢你的更正。你能回答我的问题吗?巴拉特:不客气。我没有发布答案的一个原因是,我不清楚你到底想要实现什么(以及为什么)。Python与C不同,因为它没有类似于struct
的数据类型,或者不能以如此简洁的方式声明它们的数组。它也是动态类型化的,因此其中的变量/属性没有一种类型的值永久绑定到它们,就像在C中一样——它们的类型是由当前恰好分配给它们的值定义的。请回答您的问题,并解释您计划如何使用定义的类(或dict)。