Python概念-禁锢术之__slots__

本文详细介绍了Python中__slots__的作用及其使用方法。通过实例展示了如何限制类的实例添加或删除属性,帮助读者理解__slots__对内存使用的优化及提高性能的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之所以给它起名为禁锢术,并非空缺来风,下面我们来了解一下__slost__

__slost__:其实就是将类中的名称锁定,实例化对象,只可以赋值和调用,不可以删除名字和增加新的名字

代码示例:(实例化对象示例)

 1 # 编辑者:闫龙
 2 class Foo:
 3     __slots__ = ["x","y"]#在类中定义属性x和y
 4 f = Foo()#实例化Foo
 5 f.x = 1#此时我们可以使用实例化对象调用类中的属性x
 6 f.y = 2
 7 #如果现在,我们在实例化对象中增加一个z
 8 f.z = 3
 9 #会得到如下错误
10 #AttributeError: 'Foo' object has no attribute 'z'
11 #也就是不可以,对实例化对象增加新的属性
12 #如果现在,我们在实例化对象中删除一个x
13 del f.x#此时程序执行并不会出错,但是我们打印一下Foo的命名空间
14 print(Foo.__dict__)
15 #{'__doc__': None, 'y': <member 'y' of 'Foo' objects>, '__module__': '__main__', 'x': <member 'x' of 'Foo' objects>, '__slots__': ['x', 'y']}
16 #依然可以看到x的存在,所以,实例化对象不可以删除__slots__定义的属性

代码示例:(类示例)

class Foo:
    __slots__ = ["x","y"]
Foo.__slots__ = "z"
print(Foo.__dict__)
#{'__doc__': None, 'x': <member 'x' of 'Foo' objects>, '__slots__': 'z', '__module__': '__main__', 'y': <member 'y' of 'Foo' objects>}
del Foo.x
print(Foo.__dict__)
#{'__doc__': None, '__slots__': 'z', '__module__': '__main__', 'y': <member 'y' of 'Foo' objects>}

综合以上内容,我们得到结论:

__slots__只是针对实例化对象的禁锢,直接对类中的属性进行修改,是可以的

 

转载于:https://www.cnblogs.com/DragonFire/p/6763005.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值