国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

[Python Newbie] Poser une question sur l'initialisation d'un objet une fois
我想大聲告訴你
我想大聲告訴你 2017-06-28 09:24:24
0
1
754

Le code est le suivant :

# -*- coding:gb2312 -*-
class Dog(object):
    __instance = None
    __init_flag = False
    
    def __new__(cls,name):
        if cls.__instance == None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance
    def __init__(self,name):
        #self.name = name
        if self.__init_flag == False:
            #__init_flag = True
            self.name = name
            __init_flag = True
a = Dog("旺財")
print(id(a))
print(a.name)

b = Dog("哮天犬")
print(id(b))
print(b.name)

Résultat de l'exécution?:

Ma question?:


Selon mon idée, ce que j'ai écrit dans ce code est de concevoir une classe Dog puis de créer un objet singleton (le code dans la première case rouge), c'est-à-dire finalement les instances de a et b sont en fait la même chose.
Ensuite, j'ai configuré cet objet singleton et je ne l'ai initialisé qu'une seule fois (voir le code dans la deuxième case rouge. En d'autres termes, après la création de l'instance a, son nom est Wangcai, puis après la création de l'instance b, , elle). ne doit pas être initialisé, il devrait donc être impossible d'imprimer le nom Roaring Sky Dog. Selon mon idée, le résultat qui devrait être imprimé est deux richesses prospères. Pourquoi le résultat est-il maintenant différent de ce à quoi je m’attendais ?

我想大聲告訴你
我想大聲告訴你

répondre à tous(1)
阿神

En fait, vous avez déjà implémenté l'objet singleton, et il n'est valable qu'à partir de id的結果已經(jīng)看出來了, 至于為什么你兩次的結果會不一樣呢? 因為創(chuàng)建返回是一回事, 初始化又是一回事, 在__new__里面, 確認了不會創(chuàng)建新實例, 返回的是舊實例, 但是這并不影響下一步的__init__初始化動作啊, 而且你修改的__init_flag = True只是在實例對象里面而已, 并沒有修改到那邊, 所以你的判斷在無效的, 只有修改到那邊的__init_flag, donc le code est révisé comme?:

class Dog(object):
    ....(其他內(nèi)容請自行補充)...
    def __init__(self, name):
            # self.name = name
            if not self.__init_flag:
                # __init_flag = True
                self.name = name
                Dog.__init_flag = True   # 修改基類的__init_flag 

Deux autres suggestions?:

  1. Lorsque vous jugez si l'objet est Aucun, n'utilisez pas ==, 應該用is: cls.__instance is None

  2. Jugez s'il est égal à false, 也不要用==, 應該是not: if not self.__init_flag

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal