国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

【python小白】 問關于之初始化一次對象的問題

瀏覽:125日期:2022-06-27 14:49:22

問題描述

代碼如下:

# -*- coding:gb2312 -*-class Dog(object): __instance = None __init_flag = Falsedef __new__(cls,name):if cls.__instance == None: cls.__instance = object.__new__(cls) return cls.__instanceelse: return cls.__instance def __init__(self,name):#self.name = nameif self.__init_flag == False: #__init_flag = True self.name = name __init_flag = Truea = Dog('旺財')print(id(a))print(a.name)b = Dog('哮天犬')print(id(b))print(b.name)

執行結果:

【python小白】 問關于之初始化一次對象的問題

我的問題:

【python小白】 問關于之初始化一次對象的問題按照我的想法,我的這段代碼當中寫的是,設計了一個Dog的類,然后創建一個單例對象(第一個紅色方框中的代碼),也就是說,最終的實例a和b實際上是同一個東西。然后我又把這個單例對象設置了,只初始化一次(見第二個紅色方框中的代碼),換句話說,a這個實例創建了之后,名字叫旺財,那么b這個實例創建之后,應該不會初始化,那么哮天犬這個名字應該不可能打印出來。按照我的想法,應該打印的結果是兩個旺財。為什么現在結果跟我設想的不太一樣?

問題解答

回答1:

其實你已經實現了單例對象了, 從id的結果已經看出來了, 至于為什么你兩次的結果會不一樣呢? 因為創建返回是一回事, 初始化又是一回事, 在__new__里面, 確認了不會創建新實例, 返回的是舊實例, 但是這并不影響下一步的__init__初始化動作啊, 而且你修改的__init_flag = True只是在實例對象里面而已, 并沒有修改到類那邊, 所以你的判斷在無效的, 只有修改到類那邊的__init_flag才有效, 所以代碼修正為:

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

另外有兩個小建議:

判斷對象是否None時, 不要用==, 應該用is: cls.__instance is None

判斷是否等于false, 也不要用==, 應該是not: if not self.__init_flag

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 国产99视频精品免费观看9e | 亚洲国内精品自在线影视 | 成年人网站在线 | 男女那个视频免费 | 欧美人与鲁交大毛片免费 | 国产大陆精品另类xxxx | 黑人边吃奶边扎下面激情视频 | 国产黄页 | 亚洲国产日韩成人综合天堂 | 免费中国一级啪啪片 | 国产网址在线 | 一区二区精品在线 | 成人欧美日韩视频一区 | 美国免费三片在线观看 | 精品一区二区三区的国产在线观看 | 女人精aaaa片一级毛片女女 | 日韩免费高清一级毛片在线 | 亚洲成a人片在线观看 欧美 | 91精品综合久久久久m3u8 | 一本久久道 | 久久免费看视频 | 美女黄色一级片 | 中文字幕亚洲高清综合 | 国产精品久久久久久久久福利 | 国产人妖xxxx做受视频 | 日韩一级片在线观看 | 国产在线拍揄自揄视精品不卡 | 国产精品99久久久久久宅男 | 国产一区二区三区不卡免费观看 | 女人张开腿让男人捅的视频 | 曰本美女高清在线观看免费 | 国产精品青草久久福利不卡 | 国产微拍精品福利视频 | 91色综合综合热五月激情 | 色综合九九| 毛片在线播放网站 | 国产一区二区三区在线观看视频 | 欧美另类孕交免费观看 | 精品一区二区三区三区 | 国产精品久久久久国产精品三级 | 久久精品午夜视频 |