簡體   English   中英

返回之前在子類的構造函數中包裝實例

[英]Wrapping an instance in a subclass's constructor before returning

我希望標題不要太錯誤或誤導; 我不太確定這種名稱是什么。

基本上,我已經對字典進行了很多工作(及其一些子類:例如defaultdictOrderedDict ),並且正在嘗試制作一些輔助函數,這些函數將為我完成一些工作,同時仍然可以跨許多不同類型的字典。 理想情況下,我想快速執行此操作(也就是說,要進行一些優化),並且當然要優雅。 這是我現在擁有的示例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM