使用__slots__
但是,如果我们想要限制class的属性怎么办?比如,只允许对Student实例添加name和age属性。
为了达到限制的目的,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__。

最新文章

  1. MySql学习 (一) —— 基本数据库操作语句、三大列类型
  2. VQ结合SVM分类方法
  3. [zt]Singleton和Double-Checked Locking设计模式—UML图及代码实现
  4. CI 框架访问 http://[::1]/yourproject/
  5. ubuntu 16.04 64bit安装 Julia
  6. Linux常用命令--文件的压缩和解压缩
  7. mysql语句大全
  8. android 读取串口数据的服务
  9. 【非原】c语言之声明和定义的区别
  10. Android 4.1.1源码编译
  11. 【Oracle】OCR的备份和恢复之导出导入
  12. 单线程Singleton模式的几个要点
  13. 学习使用Vim(一)
  14. Radar Installation(POJ 1328 区间贪心)
  15. 调整CentOS的文字登陆界面的分辨率
  16. MySQL整数类型说明 int(5) vs int(7)
  17. Linux 文件路径包含特殊字符的处理方式
  18. SpringBoot系列: 使用 consul 作为服务注册组件
  19. 项目(十)openvpn架构实施方案(一)跨机房异地灾备
  20. can物理信号-----------显性和隐性

热门文章

  1. 开发Canvas 绘画应用(二):实现绘画
  2. vue—data中变量和字符串拼接
  3. Python入门 (二)
  4. for循环比较
  5. 编译原理作业(第一次)-完成retinf.c(阉割版)
  6. [工作积累] shadow map问题汇总
  7. ubuntu 主题和zsh终端
  8. EXCEL 批量添加单元格名称
  9. 芯灵思Sinlinx A64 开发板移植SQLite3
  10. Centos7使用yum快速安装ansible