Python基础(九)
1、单例设计模式
1.1、new方法
new方法的作用是,创建并返回一个实例对象,如果new只调用了一次,就会得到一个对象。继承自object的新式类才有new这一魔法方法。
1.2、注意点
- new是在一个对象实例化的时候所调用的第一个方法
- new至少必须要有一个参数cls, 代表要实例化的类, 此参数在实例化时由Python解释器自动提供, 其他的参数是用来直接传递给init方法
- new决定是否要使用该init方法, 因为new可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果new没有返回实例对象, 则init不会被调用
- 在new方法中, 不能调用自己的new方法
1.3、示例
class people:
__age = 18 # 私有属性
def __init__(self):
self.__name = '张三' # 私有属性
self.height = 178
# 不做重写的话默认的new方法
def __new__(cls, *args, **kwargs):
return object.__new__(cls)
2、单例模式
2.1、简介
将类在实例化时,指向同一个内存地址,称之为单例模式 。也就是无论创建多少次这个类的对象,都会指向那么唯一的一个实例。
2.2、使用new方法实现
class people:
__age = 18 # 私有属性
def __init__(self):
self.__name = '张三' # 私有属性
self.height = 178
# 不做重写的话默认的new方法
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'): # 不存在_instance属性就创建一个
cls._instance = object.__new__(cls) # _instance赋值为一个对象开辟一个内存空间
return cls._instance
p1 = people()
print(id(p1))
p2 = people()
print(id(p2))
p3 = people()
print(id(p3))
p4 = people()
print(id(p4))
2、小结
- 单例设计模式