python类的高级方法(slots,dataclass,named tuples)
Slots
Slots 是 Python、JavaScript(部分框架)等语言中用于优化类实例的数据结构。通过预定义类的属性(即 “槽位”),它可以:
- 减少内存消耗:实例不再使用动态字典存储属性,而是使用固定大小的数组。
- 提高属性访问速度:直接通过索引访问属性,无需哈希查找。
优点:
- 每个实例占用的内存更少(尤其适合创建大量实例时)。
- 属性访问速度提升约 20-30%。
限制:
- 无法动态添加不在
__slots__
中的属性。 - 实例不能使用
__dict__
(除非显式包含__dict__
在__slots__
中)。
Dataclass
# 使用 dataclass 减少类定义的代码量
from dataclasses import dataclass@dataclass
class Person:name: strage: int# 等同于手动编写以下代码(省略了 __init__、__repr__ 等方法)
class Person:def __init__(self, name: str, age: int):self.name = nameself.age = agedef __repr__(self):return f"Person(name={self.name}, age={self.age})"
Named Tuple
from typing import namedtuple
S = namedtuple('Stock',['name', 'shares', 'price'])
保留的元组的特性,如不可变性(immutability),解包(unpacking)和索引访问(indexing)
并且还有新的特性:支持点号访问和字段名。
如S.name访问
且isinstance(s, tuple)
返回 True
,因为命名元组是元祖的子类