我希望標題不會太錯誤或者誤導;我不完全確定這個名字是什麼名字。在返回之前在子類的構造函數中包裝實例
基本上,我已經做了很多工作,使用詞典(和一些亞類的化合物:defaultdict
和OrderedDict
,例如),我試圖只是做一些輔助功能,這會做一些這方面解除對我來說,同時仍在跨越多種不同類型的詞典進行操作。理想情況下,我想快速做到這一點(即,進行一定程度的優化),當然優雅。這裏是什麼,我現在有一個例子:
def filter_dict(old_dict, keep_keys):
return {k:v for k,v in old_dict.items() if k in keep_keys}
這種運作良好,但如果old_dict
比基本詞典其他任何東西,我失去的。
好了,所以我可以這樣做type(old_dict)({.....})
包裹在old_dict的類的構造函數中新創建的字典,但仍然沒有爲defaultdicts,內搭作爲第一個參數函數返回默認值工作。如果它是第二個參數,我可以通過一些*args
或某些東西給構造函數,但這使事情變得複雜。
我想我的問題是:我可以得到一個部分應用程序的構造函數?我可以得到這個實例的膽量,並且除了items
之外的所有東西都可以調用它的類構造函數嗎?在Haskell中,我會做類似reverse = lambda f, x, *args: f(*args, x)
的東西,但在Python中甚至不允許這樣做。
我錯過了什麼?對類的一些反思?修改__new__
?工廠...還有什麼呢?我覺得這很愚蠢,試圖讓一些漂亮但有用的東西(har)。
在此先感謝您的任何見解。
是的,我已經明確地考慮過這一點,但它看起來確實......殘酷?我絕對認爲這是一個很好的學習機會,因爲我一直在嘗試進行自省,課堂布局等。 如果一切都失敗了,我可以直接返回del k的深層拷貝,如果k不在keep_keys或一些這樣的。感謝您的迴應。 – 2013-03-02 07:35:21
我理解你對優雅的渴望,但我會提醒你不要爲了清晰和/或功能而爲了自己的目的而進行面向對象的設計。複製構造函數幾乎完全符合你的要求 - 用與前一個數據相同的數據初始化一個新對象。就我個人而言,我發現__new__等人使用細微技巧的代碼很難閱讀,儘管有時這是必要的。 – cxrodgers 2013-03-06 07:22:25