» Python快速入门 » 4. 常用模块篇 » 4.1 dataclasses 数据类

dataclasses 数据类

dataclasses 模块提供一个装饰器和一系列函数用于自动添加 __init__()__repr__() 等特殊方法到用户定义的类中。 该模块最初由 PEP (Python增强提案) 557 提出。

创建数据类

from dataclasses import dataclass

@dataclass
class InventoryItem:
    """Class for keeping track of an item in inventory."""
    name: str
    unit_price: float
    quantity_on_hand: int = 0

    def total_cost(self) -> float:
        return self.unit_price * self.quantity_on_hand

@dataclass 装饰器会添加一系列方法到类中,其中包括 __init__() ,如下所示:

def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
    self.name = name
    self.unit_price = unit_price
    self.quantity_on_hand = quantity_on_hand

注意此方法是自动添加到类中的,开发者不需要手动添加。

数据类转成字典

from dataclasses import dataclass, asdict

item = InventoryItem("shoe", 25)
print(asdict(item))
# {'name': 'shoe', 'unit_price': 25, 'quantity_on_hand': 0}

字典转成数据类

from dataclasses import make_dataclass

shoe_data = {
    "name": "Shoe",
    "unit_price": 25,
    "quantity_on_hand": 1
}
InventoryItem = make_dataclass("InventoryItem", shoe_data.keys())
item = InventoryItem(**shoe_data)
print(item)
# InventoryItem(name='Shoe', unit_price=25, quantity_on_hand=1)

代码挑战

修改编辑器中数据类,使其打印 height: 5 width: 10 area: 50

Loading...
> 此处输出代码运行结果
上页
下页