类属性和实例属性
类属性:指类对象所拥有的属性,是由该类实例化出来的所有对象所共有的,类属性在内存中只存储一次
实例属性:就是实例化所得的对象的属性,在内存中存储的个数取决于对象的个数
类属性和实例属性的区别在哪儿?
1)作用域不同 类属性可以通过类名或者对象名来调用,而实例属性只能通过对象名来调用
2)在内存中存储次数不同
类属性访问的方式:
1)类名.属性名
2) 对象名.属性名
类方法和静态方法
类方法是类对象所拥有的方法,需要用修饰器一般以@classmethod来标识其为类方法
类方法访问的方式:
1). 对于类方法,第一个参数必须是类对象,作为第一个参数(cls是形参, 可以修改为其它变量名,但最好用'cls'了)
2). 能够通过实例对象和类对象去访问。
静态方法:静态方法需要用修饰器一般以@staticmethod来标识其为静态方法,
静态方法的访问方式:
1). 静态方法不需要多定义参数
2). 能够通过实例对象和类对象去访问。
通过实例对象去访问类方法和静态方法
通过类去访问类方法和静态方法
使用类方法测试时间(简化)
property静态属性
1. 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数
2. 调用时,无需括号
property属性的有两种方式:
• 装饰器 即:在方法上应用装饰器
• 类属性 即:在类中定义值为property对象的类属性
注意:
• 经典类中的属性只有一种访问方式,其对应被 @property 修饰的方法
• 新式类中的属性有三种访问方式,并分别对应了三个被@property、@方法名.setter、@方法名.deleter修饰的方法
方法一
方法二
练习
单例模式
单例模式:一个类只能实例化出一个对象的设计模式
例如任务管理器和wps的窗口界面等
实现单例模式的主要三种方式:
1)装饰器模式
2)__new__魔术方法
3)metaclass元类(类其实也是一个对象,创建对象的时候以Person()相当于类似方法调用,
对象名( ),即调用了指定元类的__call__方法)
装饰器模式:
__new__魔术方法
note:由此可见__new__方法是在实例化对象之前调用;__init__在实例化对象之后调用
__new__方法返回一个实例化的对象,例如
def __new__(cls,*arg,**kwargs):
return object.__new__(cls)
__new__方法实现单例模式改进版
metaclass元类来实现单例模式