[英]Wrapping an instance in a subclass's constructor before returning
我希望標題不要太錯誤或誤導; 我不太確定這種名稱是什么。
基本上,我已經對字典進行了很多工作(及其一些子類:例如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仍然不起作用,defaultdicts將函數作為第一個參數返回默認值。 如果是第二個參數,我可以將一些*args
或其他內容傳遞給構造函數,但這會使事情變得復雜。
我想我的問題是:我可以將部分應用程序用於構造函數嗎? 我可以獲取該實例的勇氣並調用其類構造函數,但除items
外其他所有內容都完整無缺嗎? 在Haskell中,我會做類似reverse = lambda f, x, *args: f(*args, x)
但是Python甚至不允許這樣做。
我想念什么? 上課有些自省嗎? 與__new__
? 工廠...其他 我在嘗試獲得漂亮但實用的東西時真的很傻(har)。
預先感謝您的任何見解。
我將復制原始對象,然后更改副本。 在您的示例中:
def filter_dict(old_dict, keep_keys):
res = old_dict.copy()
for k in res.keys():
if k not in keep_keys:
res.pop(k)
return res
聽起來您的輔助函數只知道他們想要在old_dict
更改的old_dict
,而不是他們想要保持相同的內容。 因此,最安全的方法似乎是依靠copy
方法(或copy
模塊),然后刪除或更改不需要的內容。 否則,您需要某種方式來確切地回憶起用於創建對象的參數,並且我不知道是否存在執行此操作的通用方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.