gpt4 book ai didi

python - 为什么 get_default_prefix @classmethod 而不仅仅是常规方法

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:32 27 4
gpt4 key购买 nike

在 formsets.py 中,您可以找到此代码片段

class BaseFormSet(StrAndUnicode):
"""
A collection of instances of the same Form class.
"""
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList):
...
self.prefix = prefix or self.get_default_prefix() # Note the self.get_default_prefix
...
...
@classmethod # Note the @classmethod
def get_default_prefix(cls):
return 'form'

为什么 get_default_prefix 是这样声明的,然后用 self. 调用?这样做有什么收获吗? get_default_prefix 在 BaseInlineFormSet (forms/models.py) 中有另一个定义

class BaseInlineFormSet(BaseModelFormSet):
...
@classmethod
def get_default_prefix(cls):
from django.db.models.fields.related import RelatedObject
return RelatedObject(cls.fk.rel.to, cls.model, cls.fk).get_accessor_name().replace('+','')

另一个在BaseGenericInlineFormset中再次使用@classmethod,所以它看起来不是一个拼写错误。我只是不明白为什么要这样做,然后用 self 调用。

我看到的唯一线索(我不明白)是管理员似乎用 FormSet.get_default_prefix() 调用它

我想知道是否有一些我对 python 不理解的地方。

最佳答案

从实例调用类方法是完全合法的,正如您在代码中看到的那样。相关的 stackoverflow post说从实例调用没有任何好处(并且这是不好的做法);因为如果您仅从实例调用,您的方法可能不应该是classmethod

不过,我认为你已经回答了你自己的问题。如果 django 从某个地方调用 FormSet.get_default_prefix() ,那么他们可能不想实例化表单集对象

关于python - 为什么 get_default_prefix @classmethod 而不仅仅是常规方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15393778/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com