Python中类似结构的数据类型

Python中类似结构的数据类型,python,Python,有没有一种简单的方法可以创建在编程上与普通Python(2或3)中类似C的struct(不一定是内存属性)相似的数据对象,而不必经历所有类的内容?我主要感兴趣的是创建任意数据类型并按名称访问其字段的快速简便方法 简单到: def Car: # quick and easy definition milesPerGallon color myCar = Car(10,"blue") # instantiation myCar.color = "red

有没有一种简单的方法可以创建在编程上与普通Python(2或3)中类似C的
struct
(不一定是内存属性)相似的数据对象,而不必经历所有类的内容?我主要感兴趣的是创建任意数据类型并按名称访问其字段的快速简便方法

简单到:

def Car:               # quick and easy definition
    milesPerGallon
    color

myCar = Car(10,"blue")  # instantiation
myCar.color = "red"     # ability to set by attribute name
print(myCar.MPG)        # ability to get by attribute name
或者,使用类是实现这一点的唯一真正方法吗?

Python3.7提供了一些非常类似于您在文章中描述的内容:

>>> from dataclasses import dataclass
>>> 
>>> @dataclass
... class Car:
...     miles_per_gallon: float
...     color: str
... 
>>> my_car = Car(10, 'blue')
>>> my_car.color = 'red'
>>> 
>>> print(my_car.miles_per_gallon)
10

如果您使用的是较旧版本的Python,则可能非常适合(正如AChampion在中指出的那样)。

字典怎么样

myCar = {'mpg': 10, 'color': 'blue'}
myCar['color'] = 'red'
print(myCar['mpg'])

@Chris提供了一个很好的
@dataclass
示例,如果您使用的是3.7,他会推荐这种方法。
这就是
namedtuple
的外观:

In []:
from collections import namedtuple
Car = namedtuple('Car', ['mpg', 'color'])

my_car = Car(10, 'blue')
print(my_car.mpg)

Out[]:
10

namedtuple
的一个限制是您不能更改值(非常像普通的tuple)

您可能想看看我知道类,如文章中所述。不过我要看一下命名元组。@Stephenasky,数据类与您在文章中描述的非常接近。它们在Python 3.7中是新的。我将用一个例子来补充答案。@Stephenasky
namedtuple
是类工厂,所以不,在Python中,您总是以这样或那样的方式对类执行此操作。除非您使用像
dict
这样的容器。但是你想要一个类型,那么你需要一个类。所有类型都是类。python中的所有东西都是一个对象。可能重复:虽然它不包括3.7数据类。。。