问题
class Dog(object):
__instane = None
def __new__(cls, *args, **kwargs):
if cls.__instane == None:
cls.__instane = object.__new__(cls)
return cls.__instane
else:
return cls.__instane
def __init__(self, name):
self.name = name
dog1 = Dog("旺财") # 创建了dog对象,并调用__init__方法,初始化 旺财
print(dog1.name)
dog2 = Dog("哮天犬") # 使用dog对象,并调用__init__方法,重新初始化哮天犬
print(dog2.name)
print(dog1.name) # 已经被重新初始化为哮天犬
"""
创建对象一次,但是初始化了两次,也就是__init__方法执行力两次
dog
旺财
哮天犬
哮天犬
"""
class Dog(object):
__instane = None
def __new__(cls, *args, **kwargs):
if cls.__instane == None:
cls.__instane = object.__new__(cls)
return cls.__instane
else:
return cls.__instane
def __init__(self, name):
self.name = name
dog1 = Dog("旺财") # 创建了dog对象,并调用__init__方法,初始化 旺财
print(dog1.name)
dog2 = Dog("哮天犬") # 使用dog对象,并调用__init__方法,重新初始化哮天犬
print(dog2.name)
print(dog1.name) # 已经被重新初始化为哮天犬
"""
创建对象一次,但是初始化了两次,也就是__init__方法执行力两次
dog
旺财
哮天犬
哮天犬
"""
解决
class Dog(object):
__instane = None
__init__flag = False
def __new__(cls, *args, **kwargs):
if cls.__instane == None:
cls.__instane = object.__new__(cls)
return cls.__instane
else:
return cls.__instane
def __init__(self, name): # 加个类属性,就很容易解决啦
if self.__init__flag == False:
self.__init__flag = True
self.name = name
dog1 = Dog("旺财") # 创建了dog对象,并调用__init__方法,初始化 旺财
print(dog1.name)
dog2 = Dog("哮天犬") # 使用dog对象,并调用__init__方法,重新初始化哮天犬
print(dog2.name)
print(dog1.name) # 已经被重新初始化为哮天犬
"""
旺财
旺财
旺财
"""
class Dog(object):
__instane = None
__init__flag = False
def __new__(cls, *args, **kwargs):
if cls.__instane == None:
cls.__instane = object.__new__(cls)
return cls.__instane
else:
return cls.__instane
def __init__(self, name): # 加个类属性,就很容易解决啦
if self.__init__flag == False:
self.__init__flag = True
self.name = name
dog1 = Dog("旺财") # 创建了dog对象,并调用__init__方法,初始化 旺财
print(dog1.name)
dog2 = Dog("哮天犬") # 使用dog对象,并调用__init__方法,重新初始化哮天犬
print(dog2.name)
print(dog1.name) # 已经被重新初始化为哮天犬
"""
旺财
旺财
旺财
"""
单例模式init问题及解决
最新推荐文章于 2021-02-20 20:49:18 发布
这篇博客讨论了在Python中实现单例模式时遇到的问题,即创建单例对象后,调用__init__方法导致多次初始化。通过添加一个类属性`__init_flag`,可以确保__init__方法只执行一次,解决了这个问题。
摘要由CSDN通过智能技术生成