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: str
    age: int

# 等同于手动编写以下代码(省略了 __init__、__repr__ 等方法)
class Person:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age
    
    def __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 ,因为命名元组是元祖的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值