簡體   English   中英

Django Rest Framework和@staticmethod。 它有什么好處?

[英]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.

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