簡體   English   中英

Python中的超級功能

[英]super function in Python

下面的代碼片段為何在模型中使用super().__init__ 它是如何工作的?

模型

class DuckForm(forms.ModelForm):
    class Meta:
        model = Duck
        fields = ('description', 'name')

    def __init__(self, community, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.community = community

    def save(self, commit=True):
        duck = super().save(commit=False)
        if not duck.community_id:
            duck.community = self.community

        if commit:
            duck.save()
        return duck 

views.py

def add_duck(request):
    if request.method == 'POST':
        form = DuckForm(request.animal.community, data=request.POST)
        if form.is_valid():
            duck = form.save()
            return redirect('DuckData')
    else:
        form = DuckForm(request.user.community)
    return TemplateResponse(request, 'MyDuck.html', {'form': form})

調用super.method調用父類的method ,在本例中為ModelForm 在這種情況下這是必要的,因為Django模型和形式在__init__方法中會發生各種奇怪的事情,並且如果您不調用super().__init__()這些將不會發生,並且對象將不會發生。表現不出所料。

另外請注意,這是python 2中的無效語法(但在python 3中完全有效且正確)。 您必須編寫super(DuckForm, self).__init__才能實現相同的目標。

暫無
暫無

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

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