# -*- coding:utf-8 -*-
class Dog(object):
__instance = None
def __new__(cls,name): #__new__方法用于创建对象,这里利用类属性进行判断,是否为第一次创建对象
if cls.__instance == None: #如果是第一次,则用cls.__instance类属性指向创建的对象的引用
cls.__instance = object.__new__(cls)
return cls.__instance #并返回创建对象的引用
else:
return cls.__instance #再一次创建时,cls.__instance已经不是None了,这时else返回第一次创建对象的引用
def __init__(self,name): #__init__方法当创建完对象时既会被调用,这里也用类属性__init_flag = False进行判断
if self.__init_flag == False: #第一次初始化时,将输入的参数存入实例对象属性中,并修改类属性__init_flag =True
self.name = name
self.__init_flag = True
a = Dog('wangcai')
print(id(a))
print(a.name)
b = Dog('xiaowangcai')
print(id(b))
print(b.name)
class Dog(object):
__instance = None
__init_flag = False
if cls.__instance == None: #如果是第一次,则用cls.__instance类属性指向创建的对象的引用
cls.__instance = object.__new__(cls)
return cls.__instance #并返回创建对象的引用
else:
return cls.__instance #再一次创建时,cls.__instance已经不是None了,这时else返回第一次创建对象的引用
def __init__(self,name): #__init__方法当创建完对象时既会被调用,这里也用类属性__init_flag = False进行判断
if self.__init_flag == False: #第一次初始化时,将输入的参数存入实例对象属性中,并修改类属性__init_flag =True
self.name = name
self.__init_flag = True
a = Dog('wangcai')
print(id(a))
print(a.name)
b = Dog('xiaowangcai')
print(id(b))
print(b.name)