当前位置: 代码迷 >> python >> Django Rest Framework和@staticmethod。 它有什么好处?
  详细解决方案

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

热度:135   发布时间:2023-06-21 11:00:31.0

我在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

为了让它正常工作,如 。

但是,由于您不在函数体中使用 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方法可能更为优雅。

  相关解决方案