Python3 基础:面向对象高级编程(上)
来源:互联网 发布:弹簧计算软件在线 编辑:程序博客网 时间:2024/05/29 08:12
使用slots
在Python中,我们可以动态的为类和对象绑定属性和方法。
给实例绑定属性和方法:
# 为实例绑定属性 name>>> class People():... pass... >>> p = People()>>> p.name = 'kd'>>> p.name'kd'>>> print(p.name)kd# 为实例绑定方法>>> def setAge(self,age):... self.age = age... >>> from types import MethodType>>> p.setAge = MethodType(setAge,p)>>> p.setAge(22)>>> p.age22
但是,给一个实例绑定的方法,对另一个实例是不起作用的。
我们可以给class绑定,这样所有的实例都可以访问了。
People.setAge = setAge>>> p.setAge(23)>>> p.age23
重点来了:
但是,如果我们想要限制实例的属性怎么办?比如,只允许对People实例添加name和age属性。
为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__
变量,来限制该class实例能添加的属性:
class People(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
就上面这个例子来说,如果绑定其他参数,则会报错 AttributeError 。
使用__slots__
要注意,__slots__
定义的属性仅对当前类实例起作用,对继承的子类是不起作用的。除非在子类中也定义__slots__
,这样,子类实例允许定义的属性就是自身的__slots__
加上父类的__slots__
。
使用@property
Python内置的 @property 装饰器就是负责把一个方法变成属性调用的。
class Student():@propertydef score(self): return self._score@score.setterdef score(self,v): if not isinstance(v,int): raise ValueError('parameters type wrong!') if v < 0 or v > 100: raise ValueError('must between 0 ~ 100') self._score = v
在使用的时候直接: 对象.属性名 、对象.属性名 = 什么什么 。
0 0
- Python3 基础:面向对象高级编程(上)
- Python3 基础:面向对象编程(上)
- Python3 基础:面向对象高级编程(中)
- Python3 基础:面向对象编程(下)
- Python3 面向对象高级
- GeekBand C++面向对象高级编程(上)一
- C++面向对象高级编程(上)学习笔记
- C++面向对象高级编程(上)学习笔记
- C++面向对象高级编程(上)学习笔记
- C++面向对象高级编程(上)_Boolan(W2)
- Boolan第一周---C++面向对象高级编程(上)
- C++面向对象高级编程(上)-Geekband
- Python3.X之面向对象高级编程笔记
- Python3 面向对象编程
- python3面向对象编程一(类)
- Python3面向对象编程笔记(一)
- 面向对象高级编程
- 面向对象高级编程
- Could not create the driver from NHibernate.Driver.MySqlDataDriver
- HTML5和CSS3不仅仅是两项新的Web技术标准
- android程序中的AndroidManifest.xml中的uses-feature详解
- 数据分析工具,你选对了吗?
- 腾讯学院运营课程第一天
- Python3 基础:面向对象高级编程(上)
- 汉诺塔问题
- XML 中的 ﹤![CDATA[ ]]>,及其解析
- fedora23自动登陆root
- 蓝桥杯-查找整数
- android framelayout两布局重叠,如何让下层不响应事件
- Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)
- iOS Xcode build自动增长
- 【基础】unity:鼠标的常用事件