Python学习---11
来源:互联网 发布:ubuntu 配置保存 编辑:程序博客网 时间:2024/06/05 14:15
要限制实例的属性
Python允许在定义class的时候,定义一个特殊的__slots__
变量,来限制该class实例能添加的属性
使用__slots__
要注意,__slots__
定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
Python内置的@property装饰器负责把一个方法变成属性调用,可以定义只读属性。
多重继承
通过多重继承,一个子类就可以同时获得多个父类的所有功能。
MixIn
在设计类的继承关系时,通常,主线都是单一继承下来的。但是,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn。
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。
由于Python允许使用多重继承,因此,MixIn就是一种常见的设计。
只允许单一继承的语言(如Java)不能使用MixIn的设计。
定制类
看到类似__slots__
这种形如__xxx__
的变量或者函数名就要注意,这些在Python中是有特殊用途的。
直接显示变量调用的不是__str__()
,而是__repr__()
,两者的区别是__str__()
返回用户看到的字符串,而__repr__()
返回程序开发者看到的字符串,也就是说,__repr__()
是为调试服务的。
使用枚举类
当我们需要定义常量时,一个办法是用大写变量通过整数来定义。
Python提供了Enum类来实现枚举类型的定义。
value属性则是自动赋给成员的int常量,默认从1开始计数。
@unique装饰器可以帮助我们检查保证没有重复值。
既可以用成员名称引用枚举常量,又可以直接根据value的值获得枚举常量。
Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。
使用元类
动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。
type()函数可以查看一个类型或变量的类型。
创建class的方法就是使用type()函数。
type()函数既可以返回一个对象的类型,又可以创建出新的类型。
要创建一个class对象,type()函数依次传入3个参数:
1 class的名称;
2 继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
3 class的方法名称与函数绑定
通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。
正常情况下,我们都用class Xxx…来定义类,但是,type()函数也允许我们动态创建出类来,也就是说,动态语言本身支持运行期动态创建类。
metaclass
metaclass,直译为元类,简单的解释就是:
当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。
但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类。
连接起来就是:先定义metaclass,就可以创建类,最后创建实例。
metaclass允许创建类或者修改类。换句话说,可以把类看成是metaclass创建出来的“实例”。
- python学习11
- python学习笔记11
- Python学习手册 - 11
- Python学习笔记11
- Python学习笔记11
- Python学习---11
- Python学习笔记(11)-Python自定义函数
- python 学习笔记11-----类
- python 进阶学习之11
- Python学习笔记(11)
- python学习11-面向对象
- python学习(11)模块
- Python学习之旅-11
- Python学习笔记-17.10.11
- python 学习 2017 11 16
- 【Python学习】Python 关键字
- Python学习----Python基础
- 【python】:python学习笔记
- 实现List集合中数据逆序排列
- 【BigHereo 50】---Datastructure---数据结构大总结(八)
- Ajax(1)
- JsonProvider源码翻译
- 设计模式之单例模式(Java)
- Python学习---11
- iconfont
- Spring Cloud 微服务实战——Java开发人员必须掌握的技术
- Web Scraping with Python:使用 Python 导出 CSDN 博客全部文章(保留样式)和附带图片
- SubList分页-007-Dao类
- log4j.properties配置详解与实例
- http 请求转发服务器
- 开启数据科学生涯的45种方式
- 罗马数字与阿拉伯数字的相互转换