Python3 面向对象高级
来源:互联网 发布:复杂网络的定义 编辑:程序博客网 时间:2024/06/06 07:51
Python3 面向对象高级
__slots__
- 定义一个类,创建类实例,可以给实例绑定任何属性和方法。
class Student(object): passs=Student()s.name='Michael'print(s.name) def set_age(self,age): self.age=age>>>from types import MethodType>>>s.set_age=MethodType(set_age,s) #给实例绑定一个方法>>>s.set_age(25) #调用实例方法>>>s.age25
- 给一个实例绑定的方法,对另一个实例无效。给所有实例绑定方法,可以给类绑定方法。
def set_score(self,score): self.score=scoreStudent.set_score=set_score>>>s.set_scroe(100)>>>s.score100>>>s2.set_score(99)>>>s2.score99
- 限制实例的属性需要定义
__slots__
。可以限制该类实例能添加的属性。
class Student(object): __slots__=('name','age') #用tuple定义允许绑定的属性名称
__slots__
定义的属性仅对当前类实例有作用,对继承的子类无效。
除非再子类中也定义__slots__
。子类实例允许定义的属性就是自身的__slots__
加上父类的__slots__
@property
@property
装饰器将一个方法变成属性来调用。
class Student(object): @property def score(self): return self._score @score.setter def score(self,value): if not isinstance(value,int): raise ValueError('score must be an integer') if value<0 or value>100: raise ValueError('score must between 0-100') self._score=value
【注】把一个getter方法变成属性,只需加上@property
即可。之后@property
本身又创建了另一个装饰器@score.setter
,负责把一个setter方法变成属性赋值。至此,即拥有一个可控的属性操作
>>>s=Student()>>>s.score=60 #实际转化为s.set_score(60)>>>s.score #实际转化为s.get_score()>>>s.score=9999Traceback(most recent call last):ValueError:score must between 0-100
- 可以定义只读属性,若只定义getter方法,不定义setter方法就是一个只读属性。
class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self,value): self._birth=value @property def age(self): return 2015-self.birth
【注】上面的birth
是可读写属性,age
是只读属性
多重继承
Duck Typing
一个事物是不是鸭子(duck),如果它走起来像一只鸭子,叫起来也像一只鸭子,即从表现来看像一只鸭子,则可以认定其是一只鸭子。
即一个约定要求必须实现 Duck Typing
的思想在多种编程语言里使用广泛,如Java的Interface,Python的各种protocol
Mixln
Mixln
的目的是给一个类增加多个功能,因此在设计类时,优先考虑通过多重继承来组合多个Mixln
的功能,而不是设计多层次的复杂的继承关系。- 只允许单一继承的语言(如Java)是不能使用
Mixln
设计。
阅读全文
0 0
- Python3 面向对象高级
- Python3之面向对象高级__str__用法
- Python3 基础:面向对象高级编程(上)
- Python3 基础:面向对象高级编程(中)
- Python3.X之面向对象高级编程笔记
- python3-面向对象
- python3的面向对象
- Python3 面向对象
- Python3 面向对象
- Python3之面向对象
- 【Python】Python3 面向对象
- Python3 面向对象编程
- Python3 面向对象
- Python3 面向对象
- Python3 高级功能学习笔记(面向对象和正则表达式)
- 廖雪峰《python3基础教程》读书笔记——第九章 面向对象高级编程
- 面向对象高级(一)
- 面向对象高级(二)
- 递归调用的使用方法
- C#回顾学习笔记十五:数组的概念
- The bad news
- pycharm +anaconda3-4.4.0+python3.6.1下安装OpenCV
- CentOS下SVN服务的启动与关闭
- Python3 面向对象高级
- 网卡的若干知识
- Linux各个发行版本
- 生成patch和打patch总结
- Single_Number
- 使用GIT安装laravel
- 两数相加的方法调用
- linux grep命令详解
- 20170921在VisualStudioCode上搭建arduino开发环境