基類看起來像這樣(代碼來自Django的,但問題是沒有具體的Django):在(* args,** kwargs)python中處理參數初始值的簡單方法是什麼?
class BaseModelForm(BaseForm):
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False, instance=None):
class ModelForm(BaseModelForm):
__metaclass__ = ModelFormMetaclass
派生類看起來是這樣的:
class MyForm(forms.ModelForm):
def __init__(self, data=None, files=None, *args, **kwargs):
super(EdocForm, self).__init__(data, files, *args, **kwargs)
self.Meta.model.get_others(data, files, kwargs.get('instance', None))
如果編碼器通過實例作爲克瓦格斯這一切都很好,應該工作,但如果他們不這樣做,並將其傳遞給參數呢?處理* args和** kwargs時,提取實例的方法是什麼?誠然,在這種情況下,實例在參數中的機會很小,但如果它是第三個參數而不是第五個(不包括self)。
因此,也許廢除所有的位置參數,並迫使kwargs避免以無意的方式使用它會更好。只需要使文檔字符串拼出真正的參數。不是可以想象的最佳解決方案,但它可能是我唯一可以設計的唯一解決方案。 – boatcoder
我想你可以在Python中的'我們都是同意的成年人'這個概念下面提交。另外,如果您是BaseModelForm的子類,並且它有一個self.instance變量,則可以通過super直接訪問它。例如。 'self.instance = super(EdocForm,self).instance'。這樣,你可以讓超類處理它需要做的任何事情,併爲實例進行後期處理。 –
不知道爲什麼我沒有想到這一點。 DOOH! – boatcoder