面向对象高级特性
1.类属性与类方法
2.类方法与静态方法
3.Property类属性
4.单例模式
1.类属性与实例属性
类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。
实例属性(对象属性)不被所有类对象的实例对象所共有,在内存中的副本个数取决于对象个数。
2. 类方法与静态方法
类方法是类对象所拥有的方法,需要用修饰器一般以@classmethod来标识其为类方法
1). 对于类方法,第一个参数必须是类对象,作为第一个参数
(cls是形参, 可以修改为其它变量名,但最好用’cls’了)
2). 能够通过实例对象和类对象去访问。
静态方法需要用修饰器一般以@staticmethod来标识其为静态方法
1). 静态方法不需要多定义参数
2). 能够通过实例对象和类对象去访问
3.Property类属性
- 单例模式
必要性:对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。
如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
如何实例化一个单例?
装饰器(decorator)可以动态地修改一个类或函数的功能。这里,我们也可以使用装饰器来装饰某个类,使其只能生成一个实例,代码如下:
魔术方法:
魔术方法:
1.特殊属性
2.创建、初始化与销毁
3.可视化
4.类型转换
5.索引与切片
6.重复、连接与成员操作符
1.特殊属性:
1.name 类、函数、方法等的名字
2.module 类定义所在的模块
3.class 对象或类所属的类
4.bases 当前类的基类(父类)
5.doc 类、函数的文档帮助,没有就定义为None
6.mro Method Resolution Order方法解析顺序
7.dict 类或实例的属性,可写的字典
查看属性
dir 返回类或者对象的所有成员名称列表,dir()函数就是调用__dir__()
1). 如果dir([obj]) 参数obj包含方法 dir(),该方法将被调用。
2). 如果Obj 不包含 dir(),该方法将最大限度收集属性信息
dir(obj) 对于不同类型的对象obj具有不同的行为:
1.如果对象是模块对象,返回的列表包含模块的属性名和变量名
2.如果对象是类型或者类对象,返回的列表包含类的属性名,及它的基类的属性名
3.如果obj不写 即dir(),返回列表包含内容不同
- 在模块中,返回模块的属性和变量名
- 在函数中,返回本地作用域的变量名
- 在方法中,返回本地作用域的变量名
2.创建,初始化与销毁
面试题:python 中__new__ , init , del__的区别?
1). new的功能是在生成对象之前所做的动作,接受的参数是cls 类, 负责对象的创建
2). init是在对象生成之后完善对象的属性 它接受的是self 对象, 负责对象的初始化
3). 对象生成是在 new 里面 return (返回一个对象)
3.可视化
类型判断要使用type或isinstance, 不能通过判断print输出是否带引号来判断输出值的类型。
1). str()与repr()都是python中的内置函数,是直接用来格式化字符串的函数
2). 而__str__与__repr 是在类(对象)中对类(对象)本身进行字符串处理。
str: 返回一个可以用来表示对象的可打印的友好的字符串
1).对字符串,返回本身。
2).没有参数,则返回空字符串
3).对类,可通过__str__() 成员控制其行为。该成员不存在,则使用其 repr() 成员
4.类型转换
5.索引与切片
6.重复、连接与成员操作符
函数实例化进行相关属性验证:
7.循环
8.with语句安全上下文
**
魔术方法汇总:**
1.基本的魔法方法 | 2.有关属性的魔术方法 |
---|---|
3.比较操作符 | 4.算数运算符 |
5.反运算 | 6.增量赋值运算 |
7.一元操作符 | 8.类型转换 |
9.上下文管理(with 语句) | 10.容器类型 |