簡體   English   中英

將方法名稱作為函數參數傳遞

[英]Passing method name as function argument

我可能在這里缺少明顯的東西,我想做的是將這個Django視圖的一部分提取到一個函數中,因為我多次使用相同的代碼:

def method_name(pk, method_name, model_name):
    instance = get_object_or_404(Document, id=pk)
    wb = instance.method_name()
    with NamedTemporaryFile() as tmp:
        wb.save(tmp.name)
        tmp.seek(0)
        stream = tmp.read()
    instance.model_name.save('POPDV.xlsx', ContentFile(stream), save=False)
    instance.save()

我想將model_name傳遞為方法名稱(粗體)。 正確的方法是什么? 我的解決方案是調用instance.__getattribute__ ("model_name").save(...)

您可以使用getattr按名稱訪問屬性:

wb = getattr(instance, method_name)()
# ...
getattr(instance, model_name).save(...)

getattr(obj, name)隱式地通過各種屬性查找選項: obj.__getattribute__(name)obj.__dict__['name']obj.__getattr__(name)

通常,您不直接調用魔術方法。 它們通常是內置方法或運算符的鈎子,例如iter(obj)調用obj.__iter__()len(obj)調用obj.__len__()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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