python学习笔记1:面向对象的高级特性1__slots__
来源:互联网 发布:linux版apache下载 编辑:程序博客网 时间:2024/06/05 02:02
1.使用slots(第一次写博客下划线打不出来,请看代码):
python是一种动态语言,在正常情况下,我们定义一个类,再创建一个类的实例,我们在运行代码的时候,可以通过给这个实例绑定一个属性或者一个函数来增加这个实例的功能,如下面的例子:
class Dog(object): passdef set_name(self,dogname): self.dogname = dogname#注意set_name函数不是Dog类的函数#为dog1这个实例绑定一个 gender属性dog1 = Dog()dog1.gender = 'male'print(dog1.gender)#为dog1这个实例绑定一个set_name方法from types import MethodTypedog1.set_name = MethodType(set_name, dog1)dog1.set_name('XiaoBai')print('狗1的名字是', dog1.dogname)'''我们只是为dog1这个实例绑定了新的属性和方法, 所以对Dog这个类的其他实例没有上述绑定的属性和方法'''dog2 = Dog()try: dog2.set_name('XiaoHei')except AttributeError: print('Dog2没有set_name这个方法!')#给Dog类绑定set_name()之后,所有实例都有了set_name这个方法Dog.set_name = set_namedog2.set_name('XiaoHei')print('狗2的名字是', dog2.dogname)
运行结果:
male狗1的名字是 XiaoBaiDog2没有set_name这个方法!狗2的名字是 XiaoHei>>>
上面的例子可以看出动态语言的特性,所以又有了新的问题,有时候我们需要限制类的动态绑定怎么办?可以使用slots:
class Dog(object): __slots__ = ('name', 'age')dog1 = Dog()dog1.name = 'XioaBai'dog1.age = 13print('狗的名字:', dog1.name)print('狗的年龄:', dog1.age)try: gender = 'male' dog1.gender = gender print('狗的性别:', dog1.gender)except AttributeError: print('不能给dog1绑定gender这个属性')
运行结果:
狗的名字: XioaBai狗的年龄: 13不能给dog1绑定gender这个属性>>>
还有需要注意的地方就是:
这个类的子类如果没定义slots,没有这个绑定限制,但是当子类也定义了slots, 则子类的绑定限制范围是子类的范围加上父类的范围。
ps:不要将slot写成slot,否则没作用,还有就是slots两边都有双下划线,第一次写博客打不出来
-_-!
1 0
- python学习笔记1:面向对象的高级特性1__slots__
- 【Python】学习笔记——-8.1、面向对象高级编程:1.使用__slots__
- 8面向对象高级--->__slots__
- python学习笔记2:面向对象的高级特性2 @property
- python学习笔记3:面向对象的高级特性3 定制类
- python 面向对象高级特性
- Java学习笔记1-面向对象特性
- python学习-面向对象进阶之__slots__(五)
- 面向对象高级特性1:抽象类
- 面向对象的高级特性
- python学习笔记 使用__slots__
- Java学习(五)面向对象的高级特性
- Python学习笔记--高级特性
- python学习笔记----高级特性
- python学习笔记(七) - 面向对象高级编程
- Python面向对象高级编程——学习笔记
- 廖雪峰python学习笔记9:面向对象高级
- Python学习笔记(七)--面向对象高级编程
- java抽象类与接口
- 快速幂取模及关于矩阵的应用
- MySQL注意事项
- 蓝桥 表达式计算
- 如何在Github上建立项目演示界面
- python学习笔记1:面向对象的高级特性1__slots__
- cmd修改字符集
- ZooKeeper Watcher 和 AsyncCallback 的区别与实现
- 软连接与硬链接
- python性能优化
- 微信分享
- linux vim颜色的设置
- mysql 死锁
- 基于spark用线性回归(linear regression)进行数据预测