Ron*_*ipe 2 python django static-methods django-rest-framework
我在 serializers.py 中使用了 PyCharm 编写了一些方法。然后我必须编写一个方法来获取名称。
def get_artist_name(obj):
return obj.artist.name
Run Code Online (Sandbox Code Playgroud)
然后 PyCharm 建议我将方法设为静态。
@staticmethod
def get_artist_name(obj):
return obj.artist.name
Run Code Online (Sandbox Code Playgroud)
从那以后我想知道它有什么好处?这是一个很好的做法或类似的东西?如果有我可以阅读有关此特定主题的任何文档,请提前致谢。
第一个变体是错误的:如果你调用一个实例方法,第一个参数是被调用者(xin x.method(para, meter))。所以这意味着你需要这样写:
def get_artist_name(self, obj):
return obj.artist.nameRun Code Online (Sandbox Code Playgroud)
为了让它正常工作,足以证明中的文档SerializerMethodField。
然而,因为你不使用的self在你的函数体,没有用写同一个函数self的参数。此外,通过不将其@staticmethod设为a ,该函数只能使用序列化程序实例正确调用:如果您将使用 调用它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.
| 归档时间: |
|
| 查看次数: |
1020 次 |
| 最近记录: |