python - Python 中类似 C 的结构

标签 python struct

有没有办法在Python中方便地定义类似C的结构?我厌倦了写这样的东西:

class MyStruct():
    def __init__(self, field1, field2, field3):
        self.field1 = field1
        self.field2 = field2
        self.field3 = field3

最佳答案

更新:数据类

随着Data Classes的介绍在Python 3.7中我们已经非常接近了。

以下示例与下面的 NamedTuple 示例类似,但生成的对象是可变的,并且允许使用默认值。

from dataclasses import dataclass


@dataclass
class Point:
    x: float
    y: float
    z: float = 0.0


p = Point(1.5, 2.5)

print(p)  # Point(x=1.5, y=2.5, z=0.0)

这与新的 typing 配合得很好。模块,以防您想使用更具体的类型注释。

我一直在焦急地等待着这个!如果你问我,数据类和新的NamedTuple声明,与打字模块相结合就是天赐之物!

改进的 NamedTuple 声明

自从Python 3.6以来,它变得非常简单和美丽(恕我直言),只要你能忍受不变性

一个new way of declaring NamedTuples被引入,它允许 type annotations还有:

from typing import NamedTuple


class User(NamedTuple):
    name: str


class MyStruct(NamedTuple):
    foo: str
    bar: int
    baz: list
    qux: User


my_item = MyStruct('foo', 0, ['baz'], User('peter'))

print(my_item) # MyStruct(foo='foo', bar=0, baz=['baz'], qux=User(name='peter'))

关于python - Python 中类似 C 的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60373205/

相关文章:

python - 扩展欧氏算法和乘法逆的概念

c - 填充结构 C 时出现段错误,缩小为一行

c++ - 在已发布的结构中添加构造函数(在 memcpy 中使用)是否安全?

python - 如何理解 pandas resample 方法中的封闭和标签参数?

python - 如何从 Azure ML 中的 python 脚本获取 Web 服务的输出

python - 提高 Python 3.4 中大字典的速度

python - 如何在 VS Code 中运行 Python 脚本之前自动保存更改

arrays - 是否可以在结构中定义一个数组,其大小基于给定的变量?

C++ 模板编程结构与模板

c - 从另一个头文件获取静态结构成员的地址