轻量级 类 具有 Python 中的指定字段

Lightweight classes with specified fields in Python

我正在寻找非常像 namedtuples:

的东西
>>> from collections import namedtuple
>>> Party = namedtuple('Party', ['guests', 'location'])
>>> p = Party(['Jed', 'Fred', 'Kathy'], "Steve's House")

我使用包装器 class 来增加可扩展性:

>>> class Party(namedtuple('Party', ['guests', 'location'])):
    ...

但有两个区别。我希望字段是可变的,我希望继承起作用。 (现在我认为没有办法让一个 namedtuple 从另一个继承)。

我听说过 types.SimpleNamespace,但我不认为它允许在创建时使用位置参数(如果我错了请纠正我)。我喜欢命名元组,因为它们让我不必编写 __init____repr____eq__,所有这些都是我的用例所需要的。

对我来说重要的是:__init____repr____eq__ 的内置实现,因此我不必自己编写它们。我将需要许多 (30+) 个 class 定义,其中一些将有许多 (15+) 个字段。

对我来说(现在)不重要的是:内存效率。我不打算在任何时候拥有超过五百个这样的实例。

我正在考虑自己动手,但要确保我没有重新发明轮子。

对于一个问题,您需要 50 个 class 定义,少于五百个实例。 . .总共 ?也许您应该重新考虑这个问题并找到一种非常不同的方法?试过查字典吗?

item1 = {'party':'easter', 'guests': ['john', fred','kathy'], 'location':'here'}

你只需要标准的 python dict-class 并且可以轻松测试字段存在、添加字段等,它有 init、repr 和 eq。

或提供有关该问题的更多信息。

对于在 2022 年发现此问题的任何人来说,实现此问题的最合适 Python 功能现在是 dataclasses:

from dataclasses import dataclass
from typing import List

@dataclass
class Party:
    guests: List[str]
    location: str