python實例化對象做實參_如何在Python中記住類實例化?

好的,這是真實的場景:我正在編寫一個應用程序,我有一個類,它表示某種類型的文件(在我的例子中,這是照片,但細節與問題無關)。照片類的每個實例對于照片的文件名都應該是唯一的。

問題是,當用戶告訴我的應用程序加載文件時,我需要能夠識別文件何時已加載,并使用該文件名的現有實例,而不是在同一文件名上創建重復實例。

對我來說,這似乎是一個很好的使用記憶化的環境,有很多這樣的例子,但是在這種情況下,我不僅僅是在記憶一個普通的函數,我需要記憶__init__()。這帶來了一個問題,因為當__init__()被調用時,已經太晚了,因為已經創建了一個新實例。

在我的研究中,我發現了Python的__new__()方法,實際上我可以編寫一個工作簡單的示例,但是當我試圖在我的真實對象上使用它時,它崩潰了,我不知道為什么(我唯一能想到的是,我的真實對象是我無法真正控制的其他對象的子類,因此,這種方法有一些不兼容之處)。這就是我所擁有的:class Flub(object):

instances = {}

def __new__(cls, flubid):

try:

self = Flub.instances[flubid]

except KeyError:

self = Flub.instances[flubid] = super(Flub, cls).__new__(cls)

print 'making a new one!'

self.flubid = flubid

print id(self)

return self

@staticmethod

def destroy_all():

for flub in Flub.instances.values():

print 'killing', flub

a = Flub('foo')

b = Flub('foo')

c = Flub('bar')

print a

print b

print c

print a is b, b is c

Flub.destroy_all()

輸出如下:making a new one!

139958663753808

139958663753808

making a new one!

139958663753872

<__main__.Flub object at 0x7f4aaa6fb050>

<__main__.Flub object at 0x7f4aaa6fb050>

<__main__.Flub object at 0x7f4aaa6fb090>

True False

killing <__main__.Flub object at 0x7f4aaa6fb050>

killing <__main__.Flub object at 0x7f4aaa6fb090>

太完美了!只為給定的兩個唯一id創建了兩個實例,Flub.instances顯然只列出了兩個。

但是當我嘗試對我正在使用的對象使用這種方法時,我得到了各種各樣的荒謬錯誤,關于__init__()如何只使用0個參數,而不是2個參數。所以我會改變一些東西,然后它會告訴我__init__()需要一個參數。完全奇怪。

經過一段時間的斗爭,我基本上放棄了,把所有的__new__()黑魔法移到了一個名為get的staticmethod中,這樣我就可以調用Photograph.get(filename),如果filename不在Photograph.instances中,它只會調用Photograph(filename)。

有人知道我哪里做錯了嗎?有沒有更好的方法來做這個?

另一種思考方式是它類似于單例,只是它不是全局單例,只是每個文件名都是單例。

如果你想一起看的話。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455580.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455580.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455580.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bupt summer training for 16 #3 ——構造

https://vjudge.net/contest/172464 后來補題發現這場做的可真他媽傻逼 A.簽到傻逼題&#xff0c;自己分情況 1 #include <cstdio>2 #include <vector>3 #include <algorithm>4 5 using std::vector;6 using std::sort;7 8 typedef long long ll;9 10 int n…

Python02期(北京)課程筆記索引

day01 初始python關于使用notepad運行python程序注釋和語句分類 day02 命名方式和關鍵字數據類型數據類型轉換 day03 變量與數據類型運算和運算符進制轉換 day04 循環結構 day05 函數概述 day06 nonlocal和global 關鍵字詳解 day07 python核心,內建函數高階函數字…

python常用快捷鍵、寫代碼事半功倍_Pycharm常用快捷鍵總結及配置方法

工欲善其事必先利其器&#xff0c;Python開發利器Pycharm常用快捷鍵以及配置如下&#xff0c;相信有了這些快捷鍵&#xff0c;你的開發會事半功倍 一 常用快捷鍵 編輯類&#xff1a; Ctrl D 復制選定的區域或行 Ctrl Y 刪除選定的行 Ctrl Alt L 代碼格式化 Ctrl Alt O 優…

PHP中的魔術常量

魔術常量 PHP 向它運行的任何腳本提供了大量的預定義常量。不過很多常量都是由不同的擴展庫定義的&#xff0c;只有在加載了這些擴展庫時才會出現&#xff0c;或者動態加載后&#xff0c;或者在編譯時已經包括進去了。 有八個魔術常量它們的值隨著它們在代碼中的位置改變而改…

Java中的繼承性特性

繼承性是java中的第二特性之一。而繼承性最為關鍵的地方為&#xff1a;代碼重用性的問題&#xff0c;利用繼承性可以從已有的類中繼續派生出新的子類&#xff0c;也可以利用子類擴展出更多的操作功能。 繼承性的實現代碼為&#xff1a;class 子類 extends 父類{ } 有以下3點說…

10大html5前端框架

Bootstrap 首先說 Bootstrap&#xff0c;估計你也猜到會先說或者一定會有這個( 呵呵了 )&#xff0c;這是說明它的強大之處&#xff0c;擁有框架一壁江山的勢氣。自己剛入道的時候本著代碼任何一個字母都得自己敲出來擋我者廢的決心&#xff0c;來讓自己成長。結果受到周圍各 種…

多媒體技術復習匯總 收藏

多媒體技術復習匯總 收藏 1. 什么是媒體&#xff1a;媒體是信息表示和傳輸的載體。2. 媒體分類&#xff1a;感覺媒體&#xff0c;表示媒體&#xff0c;表現媒體&#xff0c;存儲媒體&#xff0c;傳輸媒體3. 多媒體技術的定義和特點&#xff1a;多媒體技…

PHP中的語法特點小結

PHP中的語法特點小結 1.PHP的變量開頭要加上$符號,見到$就知道這個是一個變量 2.PHP中的常量才是不用加$符號的 3.PHP中$可以用來嵌套使用,從而實現動態的變量名的層級調用 4.PHP程序<?php開頭,結尾可以加上?>,也可以不加 5.PHP中的常量有著魔術常量(系統自帶的) 6.PH…

滾動行為

new router({ scrollBehavior (to, from, savaPosition) { if(savePosition) { //歷史記錄的前進后退記住的之前滾動到的位置 return savePosition } else { return {x: 0, y: 0} } //history模式下 定位到某個元素失效的解決辦法 if(to.hash) { return { selector: to.h…

使用FFMPEG SDK解碼流數據獲得YUV數據及其大小

本文以H264視頻流為例&#xff0c;講解解碼流數據的步驟。 為突出重點&#xff0c;本文只專注于討論解碼視頻流數據&#xff0c;不涉及其它&#xff08;如開發環境的配置等&#xff09;。如果您需要這方面的信息&#xff0c;請和我聯系。 準備變量 定義AVCodecContext。如果您…

關于Python3.7和Python3.6中元組類型數據內存存儲問題

關于Python3.7和Python3.6中元組類型數據內存存儲問題 小編最近發現了一個瑕疵 當定義一個元組類型的變量后,若在程序后面再定義一個元組變量,這兩個元組的內容相同,那么在不同的版本中會出現不同的結果 在Python3.6版本中,解釋器將在內存中開辟兩個內存空間分別存儲兩個元組的…

shell 刪除了hdfs 文件_從零開始學大數據(三) Shell操作HDFS文件系統-中

1、格式化[rootmaster sbin]# hdfs namenode -format2、命令hdfs dfsadmin查看(hdfs dfsadmin -report)[rootmaster ~]# hdfs dfsadmin -report安全模式#獲取安全模式狀態[rootmaster ~]# hdfs dfsadmin -safemode get#進入安全狀態[rootmaster ~]# hdfs dfsadmin -safemode en…

計算機硬件

計算機硬件 一、為什么要學習計算機基礎 程序員編程的本質就是讓計算機去工作&#xff0c;而編程語言就是程序員與計算機溝通的介質。程序員要想讓計算機工作&#xff0c;就要知道計算機能干什么、是怎么樣的一個完成過程&#xff0c;這也是我們必須學習計算機基礎的原因。 …

當編程作為一種愛好

一、當編程作為一種愛好&#xff0c;時刻關心一段代碼如何實現。 二、當把工具操作得足夠熟悉&#xff0c;閉眼即能達到代碼述寫的規范。 三、程序呀&#xff0c;如果愛上你是我的錯&#xff0c;我打算一錯到底。轉載于:https://www.cnblogs.com/spiriter88/p/6913539.html

Python中的函數概述

1.python中函數概述 概念 模塊化編程的思想 有組織,可共享(重復使用,實現特定的功能的代碼塊) 提高程序的可維護性,提高開發效率,提高代碼的重用性定義一個函數 1.語法:def 函數名稱(形參列表):函數體/代碼塊return 返回值 2.定義參數介紹 def :關鍵字 用于函數的定義,函數的…

鐵路售票系統_鐵路資訊:復興號動車、智能京張高鐵…中國最高端鐵路裝備看這里...

今天上午&#xff0c;兩年一度的中國國際現代化鐵路技術裝備展在京開展&#xff0c;會期3天&#xff0c;將集中展示路網建設、客貨運輸、經營管理、工程建造、技術裝備、旅客服務等鐵路行業各領域的先進產品及技術。展會現場智能京張&#xff1a;將首次實現時速350公里自動駕駛…

H.264的NALU,RTP封包說明(轉自牛人)

H.264 RTP payload 格式 H.264 視頻 RTP 負載格式 1. 網絡抽象層單元類型 (NALU) NALU 頭由一個字節組成, 它的語法如下: --------------- |0|1|2|3|4|5|6|7| -------- |F|NRI| Type | --------------- F: 1 個比特.forbidden_zero_bit. 在 H.264 規…

CentOS下安裝MySQL報安裝文件conflicts錯誤:

2019獨角獸企業重金招聘Python工程師標準>>> 第一&#xff1a;報這個錯誤&#xff0c;說明已經安裝或相關文件已經存在&#xff0c;把已經存在的文件卸載了就可以了&#xff1a; rpm -e --nodeps mysql-libs-5.1.* 轉載于:https://my.oschina.net/u/3197158/blog/1…

inc指令是什么意思_西門子PLC一些指令

指令(英文全稱意思)∶指令含義1、LD ( Load裝載):動合觸點2、LDN (Load Not不裝載):動斷觸點3、A(And與動合):用于動合觸點串聯4、AN (And Not與動斷):用于動斷觸點串聯5、o(Or 或動合):用于動合觸點并聯6、ON(Or Not 或動斷):用于動斷觸點并聯7、(Out輸出):用于線圈輸出8、OLD…

python核心,內建函數,高階函數

晨測 global和nonlocal區別 寫一個遞歸的階乘回顧 1.global和nonlocal 關鍵字 2.函數的遞歸 1.查找規律 2.設置退出條件 3.性能 3.閉包 外函數中定義一個內函數 外函數的返回值是內函數的引用 內函數引用外函數的變量,未來外函數執行完畢,不會釋放被內函數引用變量 4.總結 1.…