单例模式:一个类只有一个实例
class Person(object):
instance = None # 类属性,记录当前类创建好的对象
def __new__(cls, *args, **kwargs):
if cls.instance == None: # 只有当 instance 为 None 的时候才创建新对象
cls.instance = object.__new__(cls)
return cls.instance
def __init__(self, name):
self.name = name
p1 = Person('张三')
print(p1)
p2 = Person('李四')
print(p2)
单例模式-修改属性
class Person(object):
instance = None
is_first_run = True # 如果为 True 表示是第一次创建对象
def __new__(cls, *args, **kwargs):
if cls.instance == None:
cls.instance = object.__new__(cls)
return cls.instance
def __init__(self, name=''):
if Person.is_first_run: # 只有第一次创建对象,才需要初始化属性
self.name = name
Person.is_first_run = False
def set_name(self, new_name):
self.name = new_name
p1 = Person('张三')
print(p1.name)
p2 = Person() # 不需要传值时可以设计为缺省参数
p2.set_name('李四') # 单例模式修改属性值,最好是通过set方法
print(p2.name)
print(p1.name)