传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦缠绕的时候 黑马粉丝团   /  2019-1-9 10:04  /  145 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


问题
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)  # 已经被重新初始化为哮天犬

"""

旺财

旺财

旺财

"""
分享至 : QQ空间
收藏

1 个回复

倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马