Python中数据类排序索引的目的是什么?

2024-04-25 09:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习数据类,但我对sort_索引的用途及其实际工作方式感到困惑

我似乎找不到任何有价值的信息。官方Python文档没有提到它,这令人难以置信

以下是一个例子:

@dataclass(order=True)
class Person:
    sort_index: int = field(init=False, repr=False)
    name: str
    age: int
    weight: int = 190
 
    def __post_init__(self):
        self.sort_index = self.weight

那么,排序索引的目的是什么?它是用来干什么的?我什么时候用

再次感谢您抽出时间回答我的问题。我是Python新手


Tags: 数据文档self信息falseindex官方init
1条回答
网友
1楼 · 发布于 2024-04-25 09:21:15

__post_init__方法中设置sort_index属性(或者实际上,任何与名称无关的标识符)似乎就是执行比较的值。

比较方法有一个隐式设置(__lt____gt__,如果不熟悉,请阅读dunder方法),首先使用__post_init__方法中提供的属性,如果需要,使用其余属性进行解析

类构造函数

from dataclasses import dataclass, field

@dataclass(order=True)
class Person:
    sort_index: int = field(init=False)
    age: int
      
    
    def __post_init__(self):
        self.sort_index = self.age

第一个示例-属性age相等:

>>> p1 = Person(age=10)
>>> p2 = Person(age=10)
>>> p1 == p2
True

第二个示例-age更大:

>>> p1 = Person(age=10)
>>> p2 = Person(age=20)
>>> p2 > p1
True

更复杂的示例

from dataclasses import dataclass, field

@dataclass(order=True)
class Person:
    foo: int = field(init=False, repr=False)
    bar: int = field(init=False, repr=False)
    name: str
    age: int
    weight: int = 190
    
    
    def __post_init__(self):
        self.foo = self.weight
        self.bar = self.age
        
>>> p1 = Person('p1', 10)
>>> p2 = Person('p1', 11)
>>> p2 > p2
True

原因
fooweight)对于这两个实例是相等的,因此在barage)上进行比较

结论
比较可以是任意复杂的,标识符并不重要

我强烈推荐ArjanCodes的这本书。
除了视频,这里还有一个到example dataclass code的github链接(来自同一视频)

希望这有帮助——我自己刚刚了解了数据类

相关问题 更多 >