python - 在类中声明方法而不是在函数中声明方法有什么优点?

标签 python django

  1. 这是在 Django 项目中正常/正确的做法:

    在模型中

    class Reservation():
    
        def cancel_reservation(self):
             # ....
    
        @classmethod
        def get_client_reservations(cls):
    
  2. 我在公司代码库中找到的替代方法:

    在模型中

    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/

相关文章:

python - 模板中的 Django substr/substring

python - 添加条件后,Python Socket无法发送

python - 渲染时未捕获语法错误 : invalid syntax

python - 在 django 中创建单例,或以任何其他方式创建全局的、按请求可用的对象

django - Azure 网站出现 Django 500 错误

python - 您可以设置依赖于另一个字典条目的字典值吗?

python - 试图将 python 嵌入到 tinycc 中,说 python 符号未定义

python - 已删除 InDjango19 警告 : Model doesn't declare an explicit app_label

python - 在 Safari 中使用 Twython 获取授权 token 时出现问题

django - 如何在Django中从HttpResponseRedirect传递消息?