是否可以将特定尺寸定义为Python Dataclass中的列表?

发布于 2025-01-20 21:25:49 字数 58 浏览 1 评论 0原文

与 c++ 中的 vec3d p[3] 类似,定义一个大小为 3 的列表,其内容为 vec3d 类型。

Similarly to what vec3d p[3] in c++ would make, that is, define a list of size 3 whose contents are of type vec3d.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若水般的淡然安静女子 2025-01-27 21:25:49

我认为目前使用数据类无法指定列表的预期长度。
但是,您可以使用 __post_init__ ( https://docs.python.org/3/library/dataclasses.html#post-init-processing)方法来编写一些验证代码:

从数据类导入数据类

@数据类
类示例数据类:
     some_variable: 列表[浮点数]
   
     def __post_init__(self) ->;没有任何:
         断言 len(self.some_variable) == 3, f"some_variable 需要一个包含 3 个元素的列表!"


如果 __name__ == "__main__":
    example_dataclass = ExampleDataclass(some_variable=[0, 1, 2]) # 有效
    # example_dataclass = ExampleDataclass(some_variable=[0, 1]) # 失败
    # example_dataclass = ExampleDataclass(some_variable=[0, 1, 2, 3]) # 也失败

I think specifying the expected length of a list is not doable with a dataclass at the moment.
However you could use the __post_init__ (https://docs.python.org/3/library/dataclasses.html#post-init-processing) method to write some validation code:

from dataclasses import dataclass

@dataclass
class ExampleDataclass:
     some_variable: list[float]
   
     def __post_init__(self) -> None:
         assert len(self.some_variable) == 3, f"some_variable expects a list with 3 elements!"


if __name__ == "__main__":
    example_dataclass = ExampleDataclass(some_variable=[0, 1, 2])  # works
    # example_dataclass = ExampleDataclass(some_variable=[0, 1])  # fails
    # example_dataclass = ExampleDataclass(some_variable=[0, 1, 2, 3])  # fails as well
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文