上一篇:类方法和静态方法的使用 | 手把手教你入门Python之六十
下一篇:类属性案例练习 | 手把手教你入门Python之六十二
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
单例设计模式
__new__和__init__⽅法
class A(object):
def __init__(self):
print("这是 init ⽅法")
def __new__(cls):
print("这是 new ⽅法")
return object.__new__(cls)
A()
总结
-
__new__
⾄少要有⼀个参数cls,代表要实例化的类,此参数在实例化时由Python解释器⾃动提供 -
__new__
必须要有返回值,返回实例化出来的实例,这点在⾃⼰实现__new__
时要特别注意,可以return⽗类__new__
出来的实例,或者直接是object的__new__
出来的实例 -
__init__
有⼀个参数self,就是这个__new__
返回的实例,__init__
在__new__
的基础上可以完成⼀些其它初始化的动作,__init__
不需要返回值
单例设计模式
举个常⻅的单例模式例⼦,我们⽇常使⽤的电脑上都有⼀个回收站,在整个操作系统中,回收站只能有⼀个实例,整个系统都使⽤这个唯⼀的实例,⽽且回收站⾃⾏提供⾃⼰的实例。因此回收站是单例模式的应⽤。
确保某⼀个类只有⼀个实例,⽽且⾃⾏实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是⼀种对象创建型模式。
# 实例化⼀个单例
class Singleton(object):
__instance = None
__is_first = True
def __new__(cls, age, name):
if not cls.__instance:
cls.__instance = object.__new__(cls)
return cls.__instance
def __init__(self, age, name):
if self. __is_first: # 不会再创建第⼆个对象
self.age = age
self.name = name
Singleton. __is_first = False
a = Singleton(18, "张三")
b = Singleton(28, "张三")
print(id(a))
print(id(b))
print(a.age) # 18
print(b.age) # 18
a.age = 19
print(b.age)