📅  最后修改于: 2023-12-03 14:51:20.372000             🧑  作者: Mango
数据类(data class)是 Python 3.7 新增的特性,它们被设计用来保存数据,以便于简洁地定义和访问。嵌套的数据类可以用来创建比较复杂的数据结构,让代码更具表现力和可读性。
让我们从定义一个简单的数据类开始,这个数据类表示一个人的姓名和年龄。
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
person = Person("Alice", 30)
print(person)
输出:
Person(name='Alice', age=30)
可以看到,使用数据类 Person
创建一个 person
实例,并输出它的字符串表示。字符串 Person(name='Alice', age=30)
表示一个 Person
对象,它的属性 name
的值为 'Alice'
,属性 age
的值为 30
。
现在,我们想要扩展 Person
类,使其表示多个人,每个人都有一系列朋友。我们可以使用另一个数据类 Friend
来表示一个朋友,然后将它添加到 Person
类中。
from dataclasses import dataclass
@dataclass
class Friend:
name: str
age: int
@dataclass
class Person:
name: str
age: int
friends: List[Friend]
alice = Person("Alice", 30, [Friend("Bob", 25), Friend("Charlie", 40)])
print(alice)
输出:
Person(name='Alice', age=30, friends=[Friend(name='Bob', age=25), Friend(name='Charlie', age=40)])
可以看到,我们使用 List[Friend]
来定义 friends
属性,并将其初始化为一个包含两个 Friend
对象的列表。输出字符串表示了 Person
对象的所有属性,包括 friends
列表中的两个朋友。
在实际开发中,我们可能需要更复杂的数据结构。例如,我们可能有一个存储市场上产品价格和库存的数据库。我们可以使用以下数据类来表示它:
from dataclasses import dataclass
from typing import List
@dataclass
class Product:
name: str
price: float
quantity: int
@dataclass
class Market:
name: str
products: List[Product]
market = Market("Supermarket", [Product("apple", 2.0, 50), Product("banana", 1.0, 100), Product("orange", 1.5, 30)])
print(market)
输出:
Market(name='Supermarket', products=[Product(name='apple', price=2.0, quantity=50), Product(name='banana', price=1.0, quantity=100), Product(name='orange', price=1.5, quantity=30)])
可以看到,我们定义了一个包含 Product
对象的 List
属性 products
,并用它来初始化 Market
对象。
除了简单的属性类型之外,数据类也可以包含嵌套的数据类,列表和字典,以便表示更复杂的数据结构。使用数据类创建嵌套的数据结构可以使代码更具表现力和可读性,并且更容易使用。