Python 中数据类的 sort_index 的用途是什么?

Wal*_*r M 1 python python-3.x data-class python-dataclasses

我正在学习数据类,但我对 sort_index 的目的及其实际工作原理感到困惑。

我似乎找不到任何有价值的信息。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
Run Code Online (Sandbox Code Playgroud)

那么,sort_index的目的是什么?它是干什么用的?我什么时候使用它?

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

小智 6

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

\n

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

\n

类构造函数

\n
from dataclasses import dataclass, field\n\n@dataclass(order=True)\nclass Person:\n    sort_index: int = field(init=False)\n    age: int\n      \n    \n    def __post_init__(self):\n        self.sort_index = self.age\n
Run Code Online (Sandbox Code Playgroud)\n

第一个示例\xe2\x80\x94age属性相等:

\n
>>> p1 = Person(age=10)\n>>> p2 = Person(age=10)\n>>> p1 == p2\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n

第二个示例\xe2\x80\x94age更大:

\n
>>> p1 = Person(age=10)\n>>> p2 = Person(age=20)\n>>> p2 > p1\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n

更复杂的例子

\n
from dataclasses import dataclass, field\n\n@dataclass(order=True)\nclass Person:\n    foo: int = field(init=False, repr=False)\n    bar: int = field(init=False, repr=False)\n    name: str\n    age: int\n    weight: int = 190\n    \n    \n    def __post_init__(self):\n        self.foo = self.weight\n        self.bar = self.age\n        \n>>> p1 = Person(\'p1\', 10)\n>>> p2 = Person(\'p1\', 11)\n>>> p2 > p2\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n

原因
\n foo( weight) 对于两个实例都相等,因此在bar( age)上进行比较

\n

结论
\n比较可以任意复杂,并且标识符并不重要。

\n

我强烈推荐ArjanCodes 制作的有关数据类的视频
\n除了视频之外,这里还有示例数据类代码的 github 链接(来自同一视频)。

\n

希望这有助于\xe2\x80\x94我自己刚刚了解了数据类。

\n