![](/img/trans.png)
[英]Use @staticmethod in Django Rest Framework endpoint method?
[英]Django Rest Framework and @staticmethod. What is the benefit of it?
我在serializers.py中使用PyCharm編寫了一些方法。 然后我不得不編寫一個方法來獲取名稱。
def get_artist_name(obj):
return obj.artist.name
然后PyCharm建議我讓方法保持靜態。
@staticmethod
def get_artist_name(obj):
return obj.artist.name
從那以后我想知道它的好處是什么? 這是一個很好的做法或類似的東西? 如果有任何文檔我可以閱讀有關此特定主題的信息,請提前感謝。
第一個變體是錯誤的:如果你調用一個實例方法,第一個參數是被調用者 ( x.method(para, meter)
的x
x.method(para, meter)
)。 所以這意味着你需要寫它:
def get_artist_name(self, obj):
return obj.artist.name
為了讓它正常工作,如SerializerMethodField
文檔中所示 。
但是,由於您不在函數體中使用 self
,因此使用self
參數編寫函數是沒有用的。 此外,通過不使它成為@staticmethod
,只能使用序列化程序實例正確調用該函數:如果使用SerializerClass.get_artist_name(None, obj)
調用它,則需要提供未使用的第一個參數。 這與使用some_serializer.get_artist_name(obj)
調用它相反,其中只有一個顯式參數。
通過使用@staticmethod
,你可以“協調”兩者:現在你可以調用SerializerClass.get_artist_name(obj)
和some_serializer.get_artist_name(obj)
,以及@staticmethod
裝飾器,將確保兩者的工作方式相同。
除非您認為您需要訪問序列化程序對象,否則子類將需要(通常您希望避免從子實現中“移除”裝飾器),使用@staticmethod
方法可能更為優雅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.