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__似乎是执行比较的值。
比较方法有一个隐式设置(__lt__、__gt__等 - 如果不熟悉,请阅读 dunder 方法),__post_init__首先使用方法中提供的属性,如果需要,则使用其余属性进行解析。
类构造函数
\nfrom 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\nRun Code Online (Sandbox Code Playgroud)\n第一个示例\xe2\x80\x94age属性相等:
>>> p1 = Person(age=10)\n>>> p2 = Person(age=10)\n>>> p1 == p2\nTrue\nRun Code Online (Sandbox Code Playgroud)\n第二个示例\xe2\x80\x94age更大:
>>> p1 = Person(age=10)\n>>> p2 = Person(age=20)\n>>> p2 > p1\nTrue\nRun Code Online (Sandbox Code Playgroud)\n更复杂的例子:
\nfrom 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\nRun Code Online (Sandbox Code Playgroud)\n原因
\n foo( weight) 对于两个实例都相等,因此在bar( age)上进行比较
结论
\n比较可以任意复杂,并且标识符并不重要。
我强烈推荐ArjanCodes 制作的有关数据类的视频。
\n除了视频之外,这里还有示例数据类代码的 github 链接(来自同一视频)。
希望这有助于\xe2\x80\x94我自己刚刚了解了数据类。
\n| 归档时间: |
|
| 查看次数: |
7705 次 |
| 最近记录: |