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

2024-04-30 03:18:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    在型号.py你知道吗

    class Reservation():
    
        def cancel_reservation(self):
             # ....
    
        @classmethod
        def get_client_reservations(cls):
    
  2. 我在公司代码库中发现的另一种方法是:

    在型号.py你知道吗

    class Reservation():
        # There is no method here except __unicode__ 
    

    在管理方面_预订.py你知道吗

    def cancel_reservation(reservation):
        # ...
    
    def get_client_reservations():
        # ...
    

我想列出一份选择第一种方法而不是第二种方法的后果清单。你知道吗


Tags: 项目django方法pyselfclientgetdef
3条回答

如果方法与类相关,例如如果它需要某个类变量,或者如果它在逻辑上属于类,则应该将方法放在类中

这不是一个技术性的答案,但是试着对代码做一个git blame,看看是谁写的方法,问他们为什么选择这样做。一般来说,最好将方法保留在类上(出于多种原因)-例如,能够执行dir(r)(其中r是保留)并查看r上的所有方法

这是一种编码方式。”OOP中的“Object”是data方法。对象拥有保存和操作数据所需的一切。没有“正确”的答案,更多的是意见和风格。你知道吗

所以你可以写:

r = Reservation.objects.get(pk=1)
r.get_client_reservation()

而不是:

from . import get_client_reservation
get_client_reservation(r)

但事实是Python模块是一个很好的解决方案,它可以将所有的东西保持在一起,而且比复杂的继承链更容易调试。你知道吗

在django中,OOP是必不可少的,因为框架可以让您轻松地对组件进行子类化,并只定制您需要的内容,没有对象很难做到这一点。你知道吗

如果您需要一个带有特定字段的特定窗体,那么您可以将其编写为一个带有函数的简单模块。但是如果你需要一个通用的“表单”,每个人都可以定制(或者一个模型,认证后端等等),你就需要OOP。你知道吗

所以底线(IMHO):如果保留是在金字塔的底部,数据和代码的结束行,没有大的区别,更多的个人偏好。如果它在上面,你需要保留这个和那个,OOP更好。你知道吗

相关问题 更多 >