这是在 Django 项目中正常/正确的做法:
在模型中
class Reservation(): def cancel_reservation(self): # .... @classmethod def get_client_reservations(cls):
我在公司代码库中找到的替代方法:
在模型中
class Reservation(): # There is no method here except __unicode__
并在 manage_reservations.py 中
def cancel_reservation(reservation): # ... def get_client_reservations(): # ...
我想要一份详尽的 list ,列出选择第一种方式而不是第二种方式的后果。
最佳答案
这是一种编码风格。 OOP 中的“对象”是数据和方法。该对象具有保存数据和操作数据所需的一切。没有“正确”答案,更多观点和风格。
所以你可以这样写:
r = Reservation.objects.get(pk=1)
r.get_client_reservation()
然后:
from . import get_client_reservation
get_client_reservation(r)
但事实是,Python 模块是将事物放在一起的非常好的解决方案,而且它比复杂的继承链更容易调试。
在 django 中,OOP 是必不可少的,因为该框架使您可以轻松地对组件进行子类化并仅自定义您需要的内容,如果没有对象,这很难做到。
如果您需要具有特定字段的特定表单,则可以将其编写为具有功能的简单模块。但是,如果您需要每个人都可以自定义的通用“表单”(或模型、身份验证后端等),则需要 OOP。
所以bottom line(恕我直言):如果Reservation在金字塔的底部,数据和代码的最后一行,没什么大的区别,更多的是个人喜好。如果它在顶部并且您将需要 ReservationThis 和 ReservationThat,OOP 更好。
关于python - 在类中声明方法而不是在函数中声明方法有什么优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35293075/