例如,我们有一个从第三方 API 获取有关模型的附加信息的方法。可以将其作为一种方法放在模型上还是应该放在外面?
class Entity(models.Model):
name = ...
location = ...
def fetch_location(self):
# fetch the location from another server and store it.
self.location = "result"
例如,我们有一个从第三方 API 获取有关模型的附加信息的方法。可以将其作为一种方法放在模型上还是应该放在外面?
class Entity(models.Model):
name = ...
location = ...
def fetch_location(self):
# fetch the location from another server and store it.
self.location = "result"
如果数据与实例相关,那么它可能是放置它的正确位置。只有当你得到很多这些你可能想要将它们包装在一个不同的类中以便你自己的可读性(即从实例的角度知道什么是内部的,什么是外部的)。
我通常这样做的方式:
好吧,如果您从面向对象编程的角度考虑,答案是“是”:
如果“对象可以做某事”,那么它应该作为成员函数(又名方法)包含在内。
但是:如果几个不同的类需要相同的功能(例如,“实体所有者”想自己获取位置而不调用 my_entity.fetch_location),您应该考虑在两个类之上实现该行为的(抽象)类。
如果您必须在没有现有实例的情况下调用该方法(在您的示例中似乎不是这种情况),您可能会考虑在类之外编写该方法,或者添加 @staticmethod
允许您调用的装饰器(Entity.fetch_location
请记住在这种情况是因为如果没有实例就没有自我。)我更喜欢静态方法而不是全局方法,因为调用者总是知道它与哪个类相关。
@staticmethod
def fetch_location():
# fetch the location from another server and store it.
self.location = "result"