• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python中的__slots__使用示例

python中的__slots__使用示例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了python slots,slots,slots是什么意思,extra equip slots,slots游戏等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。先定义class:

>>> class Staff(object):
...     pass
...
</div>
然后,尝试给实例绑定一个属性:

>>> s = Staff()
>>> s.name = 'jack'
>>> print s.name
jack
>>>
</div>

还可以尝试给实例绑定一个方法:

>>> def set_age(self,age):
...     self.age = age
...
>>> from types import MethodType
>>> s.set_age = MethodType(set_age, s, Staff)
>>> s.set_age(34)
>>> s.age
34
</div>

但是,给一个实例绑定的方法,对另一个实例是不起作用的:

>>> s2 = Staff()
>>> s2.set_age(35)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Staff' object has no attribute 'set_age'
</div>

为了给所有实例都绑定方法,可以给class绑定方法:

>>> def set_score(self, score):
...     self.score = score
...
>>> Staff.set_score = MethodType(set_score, None, Staff)
</div>
给class绑定方法后,所有实例均可调用:

>>> s.set_score(100)
>>> s.score
100
>>> s2.set_score(99)
>>> s2.score
99
</div>
通常情况下,上面的set_score方法可以直接定义在class中,但动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现。

使用__slots__

但是,如果我们想要限制class的属性怎么办?比如,只允许对Staff实例添加name和age属性。

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class能添加的属性:

>>> class Staff(object):
...     __slots__ = ('name', 'age')
...
</div>

然后,我们试试:

>>> s = Staff()
>>> s.name = 'jack'
>>> s.age = 34
>>> s.score = 99
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Staff' object has no attribute 'score'
</div>

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

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

>>> class GraduateStaff(Staff):
...     pass
...
>>> g = GraduateStaff()
>>> g.score = 9999
>>> g.score
9999
</div>
除非在子类中也定义__slots__,这样,子类允许定义的属性就是自身的__slots__加上父类的__slots__。

</div>

您可能想查找下面的文章:

  • python中__slots__用法实例
  • 在Python中使用__slots__方法的详细教程
  • 用Python中的__slots__缓存资源以节省内存开销的方法
  • python中的__slots__使用示例
  • Python中的__SLOTS__属性使用示例

相关文章

  • 安装ElasticSearch搜索工具并配置Python驱动的方法
  • Python如何读取MySQL数据库表数据
  • paramiko模块安装和使用(远程登录服务器)
  • Python正则表达式介绍
  • Python语法快速入门指南
  • 利用Python实现Windows定时关机功能
  • python修改字典内key对应值的方法
  • python使用mailbox打印电子邮件的方法
  • python文件与目录操作实例详解
  • python列表去重的二种方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python连接mssql数据库编码问题解决方法
    • 浅谈Python2.6和Python3.0中八进制数字表示的区别
    • 详解Python中break语句的用法
    • python里对list中的整数求平均并排序
    • 在tensorflow中设置保存checkpoint的最大数量实例
    • python简单实现刷新智联简历
    • python使用正则表达式分析网页中的图片并进行替换的方法
    • Python创建模块及模块导入的方法
    • Django中处理出错页面的方法
    • python del()函数用法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有