标签: python-dataclasses

如何更新列表中所有数据类对象的属性?

我有以下类型的对象列表:

@dataclass
class Feature:
    name: str
    active: bool
Run Code Online (Sandbox Code Playgroud)

我的清单是:

features = [Feature("name1",False), Feature("name2",False), Feature("name3",True)]
Run Code Online (Sandbox Code Playgroud)

我想取回包含所有功能的列表,但将其active属性切换为True. 我尝试map()这样使用:

active_features=list(map(lambda f: f.active=True,features))
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误expected parameter。如何才能实现这一目标?

请注意 ,我认为这是从示例中得出的,但我想我应该澄清一下。我想用一些简短的内联方法来做到这一点,而不需要按照一些答案的建议定义一个新的单独函数,但也许不能像这样完成?

python python-dataclasses

3
推荐指数
1
解决办法
696
查看次数

为什么 slot=True 使数据类忽略其默认值?

此代码按预期工作:

from dataclasses import dataclass

@dataclass(slots=False, init=False)
class Test:
    field: str = "default value"


print(Test())  # outputs "Test(field='default value')"
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改slotsTrue,它会抛出 AttributeError:

AttributeError: 'Test' object has no attribute 'field'
Run Code Online (Sandbox Code Playgroud)

要解决此问题,我必须使用生成的__init__方法或显式初始化自定义方法中的所有字段__init__。这种行为背后的原因是什么?

python slots python-dataclasses

3
推荐指数
1
解决办法
371
查看次数

如何使用元组和 dict 解包制作 attrs 类但没有额外的方法

我刚开始使用attrsPython 模块,它非常漂亮(或者类似地,我们可以使用 Python 3.7 DataClasses)。我有一个常见的使用模式是让类成为参数值的容器。我喜欢分配参数时的标签,以及更清晰的属性样式引用值,但我也喜欢在将值存储在有序 dict 之类的东西中时有几个很好的功能:

  1. *像 atuple或 a一样解包list以输入函数参数
  2. ** 当需要或需要传递关键字时解压缩。

我可以通过在类中添加三个方法来实现这一切

@attr.s
class DataParameters:
    A: float = attr.ib()
    alpha: float = attr.ib()
    c: float = attr.ib()
    k: float = attr.ib()
    M_s: float = attr.ib()

    def keys(self):
        return 'A', 'alpha', 'c', 'k', 'M_s'

    def __getitem__(self, key):
        return getattr(self, key)

    def __iter__(self):
        return (getattr(self, x) for x in self.keys())
Run Code Online (Sandbox Code Playgroud)

然后我可以使用这样的类:

params = DataParameters(1, 2, 3, 4, 5)
result1 = function1(100, 200, *params, 300) …
Run Code Online (Sandbox Code Playgroud)

python python-attrs python-dataclasses

2
推荐指数
1
解决办法
2330
查看次数

使用 queue.PriorityQueue,不关心比较

我正在尝试queue.PriorityQueue在 Python 3(.6) 中使用。

我想存储具有给定优先级的对象。但是如果两个对象具有相同的优先级,我也不介意PriorityQueue.get返回。换句话说,我的对象不能以整数进行比较,允许它们是没有意义的,我只关心优先级。

Python 3.7 的文档中,有一个涉及dataclasses. 我引用:

如果数据元素不可比较,可以将数据包装在一个忽略数据项而只比较优先级数字的类中:

from dataclasses import dataclass, field
from typing import Any

@dataclass(order=True)
class PrioritizedItem:
    priority: int
    item: Any=field(compare=False)
Run Code Online (Sandbox Code Playgroud)

唉,我使用的是 Python 3.6。在这个版本的 Python 的文档中,没有关于使用PriorityQueue优先级的评论,也不关心在我的情况下不合逻辑的“对象值”。

有没有比__le__在我的自定义类上定义和其他比较方法更好的方法?我发现这个解决方案特别丑陋和违反直觉,但这可能是我。

python priority-queue python-dataclasses

2
推荐指数
1
解决办法
2692
查看次数

Python 3-访问数据的速度最快的是数据类还是字典?

Python 3.7引入了数据类来存储数据。我正在考虑采用这种新方法,该方法比命令更井井有条。

但是我有一个疑问。Python将键转换为dict上的哈希,这使得查找键和值的速度更快。数据类实现类似的东西吗?

哪一个更快?为什么?

python dictionary python-3.7 python-dataclasses

2
推荐指数
3
解决办法
536
查看次数

检查类是否为Python中的数据类

如何检查dataclassPython中的类?

我发现可以检查__dataclass_fields____dataclass_params__属性的存在,但是我很想找到一种更优雅的方法。

我希望使用类似inspect.isclass函数的东西。例如inspect.isdataclass,也许像。

Python有这样的东西吗?

谢谢。

python python-3.x python-dataclasses

2
推荐指数
2
解决办法
462
查看次数

如何在 Python @dataclass 中声明数组或列表?

我如何声明一个数组(或至少是列表)@dataclass?类似于下面的内容:

from dataclasses import dataclass

@dataclass
class Test():
    my_array: Array[ChildType]
Run Code Online (Sandbox Code Playgroud)

python type-hinting python-3.x python-dataclasses python-typing

2
推荐指数
1
解决办法
7129
查看次数

具有默认选项的数据类参数选择

我正在创建一个带有字段的数据类,我希望只有几个可能的值。我在想这样的事情:

@dataclass
class Person:
   name: str = field(default='Eric', choices=['Eric', 'John', 'Graham', 'Terry'])
Run Code Online (Sandbox Code Playgroud)

我知道一种解决方案是验证__post_init__方法中的参数,但是否有使用类似上述语法的更简洁的方法?

python field python-3.x python-3.7 python-dataclasses

2
推荐指数
1
解决办法
894
查看次数

如何将 marshmallow-dataclass 与 marshmallow-oneofschema 结合起来进行多态结构?

我正在尝试将 marshmallow-dataclass 与 marshmallow-oneofschema 结合起来,以处理提供给我并用于连接 java 和 python 应用程序的数据结构。

在 java 中,这个概念通常被称为“鉴别器”,它由不同的框架实现:Jackson (de-)serialization for polymorph list

我认为这应该是可能的,但现在我面临以下问题:

Traceback (most recent call last):
File "one_file_dataclass_oneofschema_example.py", line 69, in <module>
    ContainerSchema.load(example)
File "/site-packages/marshmallow_dataclass/__init__.py", line 473, in load
    all_loaded = super().load(data, many=many, **kwargs)
File "/site-packages/marshmallow/schema.py", line 722, in load
    return self._do_load(
File "/site-packages/marshmallow/schema.py", line 856, in _do_load
    result = self._deserialize(
File "/site-packages/marshmallow/schema.py", line 664, in _deserialize
    value = self._call_and_store(
File "/site-packages/marshmallow/schema.py", line 493, in _call_and_store
    value = getter_func(data)
File "/site-packages/marshmallow/schema.py", line 661, …
Run Code Online (Sandbox Code Playgroud)

python polymorphism discriminator marshmallow python-dataclasses

2
推荐指数
1
解决办法
3409
查看次数

从数据类的 __str__ 表示中排除一些属性

我们有这个类:

from dataclasses import dataclass, field
from datetime import datetime
from typing import List, Dict

@dataclass
class BoardStaff:
    date: str = datetime.now()
    fullname: str
    address: str

    ## attributes to be excluded in __str__:
    degree: str
    rank: int = 10
    badges: bool = False
    cases_dict: Dict[str, str] = field(default_factory=dict)
    cases_list: List[str] = field(default_factory=list)

Emp = BoardStaff('Jack London', address='Unknown', degree='MA')
Run Code Online (Sandbox Code Playgroud)

作为BoardStaff数据类,可以轻松print(Emp)地接收:
BoardStaff(fullname='Jack London', address='Unknown', degree='MA', rank=10, badges=False, cases={}, date=datetime.datetime(2021, 8, 10, 11, 36, 50, 693428)).

但是,我希望从表示中排除一些属性(即最后 5 …

python attributes class python-dataclasses

2
推荐指数
1
解决办法
69
查看次数