通过实例了解python__slots__使用方法

作者:冷冰若水 时间:2023-03-16 13:24:50 

一、背景

python是一个动态语言,可以支持我们在运行时动态的给类、对象添加属性或者方法;但是如果我们想要限制可以添加的属性或方法该怎么办呢?

二、__slots__

python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性:

>>> class Student(object):
... __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
...

然后尝试添加属性:


>>> s = Student() # 创建新的实例
>>> s.name = 'Michael' # 绑定属性'name'
>>> s.age = 25 # 绑定属性'age'
>>> s.score = 99 # 绑定属性'score'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'score'

由于'score'没有被放到__slots__中,所以不能绑定score属性,试图绑定score将得到AttributeError的错误。

使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的:

>>> class GraduateStudent(Student):
... pass
...
>>> g = GraduateStudent()
>>> g.score = 9999

除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__。

来源:https://www.cnblogs.com/lit10050528/p/13549762.html

标签:python,slots
0
投稿

猜你喜欢

  • 服务器端控件是如何操作的?

    2009-11-01 15:22:00
  • distinct 多列问题结合group by的解决方法

    2024-01-21 11:18:23
  • 详解MySQL性能优化(一)

    2024-01-18 11:39:52
  • Python GAE、Django导出Excel的方法

    2023-02-27 13:59:09
  • 从SNS看社会化界面设计(一)

    2009-02-23 12:21:00
  • 如何编写一个高效的国税系统通讯录数据库?

    2009-11-07 18:53:00
  • python 实现Flask中返回图片流给前端展示

    2023-12-01 06:58:23
  • pytorch 彩色图像转灰度图像实例

    2023-08-02 17:28:37
  • Python连接es之es更新操作示例详解

    2022-11-21 06:11:48
  • 浅谈Python2.6和Python3.0中八进制数字表示的区别

    2023-04-22 23:56:42
  • Python多进程同步简单实现代码

    2021-05-17 23:48:04
  • Python中logging日志模块代码调试过程详解

    2021-03-13 05:40:32
  • Python操作数据库之数据库编程接口

    2024-01-25 01:55:41
  • PHP编码转换函数 自动转换字符集支持数组转换

    2024-05-02 17:33:28
  • Python使用add_subplot与subplot画子图操作示例

    2022-12-15 13:14:28
  • pycharm中选中一个单词替换所有重复单词的实现方法

    2022-11-07 02:51:16
  • Pytest+request+Allure实现接口自动化框架

    2023-08-12 17:29:33
  • sql to sqlalchemy 转换的小例子

    2024-01-22 10:50:39
  • 微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法

    2024-04-18 09:42:40
  • IE多版本共存的解决方案——IETester(推荐)

    2009-03-26 12:47:00
  • asp之家 网络编程 m.aspxhome.com