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

Eli*_*ICA 5 python class namedtuple

我正在寻找一些非常喜欢的东西namedtuples:

>>> from collections import namedtuple
>>> Party = namedtuple('Party', ['guests', 'location'])
>>> p = Party(['Jed', 'Fred', 'Kathy'], "Steve's House")
Run Code Online (Sandbox Code Playgroud)

我使用包装类来添加可扩展性:

>>> class Party(namedtuple('Party', ['guests', 'location'])):
    ...
Run Code Online (Sandbox Code Playgroud)

但有两点不同.我希望这些字段是可变的,我希望继承可以工作.(现在我不认为有一种方法可以让一个名字元素从另一个继承).

我听说过types.SimpleNamespace,但我认为它不允许在创作中进行位置论证(如果我错了,有人会纠正我).我喜欢namedtuples,因为他们让我不必编写__init__,__repr____eq__,所有这一切,我需要为我的使用情况.

什么是对我很重要:内置的实现__init__,__repr____eq__因此我没有写他们自己.我将需要许多(30+)这些类定义,其中一些将有许多(15+)个字段.

什么对我来说并不重要(现在):记忆效率.我不打算在任何时候都有超过五百个这样的实例.

我正在考虑自己动手,但我想确保我不会重新发明轮子.

Ale*_*x W 5

对于 2022 年发现这个问题的人来说,实现这一目标的最合适的 Python 功能现在是数据类

from dataclasses import dataclass
from typing import List

@dataclass
class Party:
    guests: List[str]
    location: str
Run Code Online (Sandbox Code Playgroud)