Django表单视图:我应该继承还是使用类的实例

时间:2014-04-29 12:22:22

标签: django django-views django-generic-views

我的情况如下

class MyViewStorage(Object):
      # methods

class MyView1(FormView):
      # methods

class MyView2(FormView):
      # methods

MyViewStorage提供了一些处理MyView1MyView2存储的方法。这些方法需要在MyView1MyView2中创建实例属性。

我现在有两种方法可以使用这个类。

  1. 在其他两个类中继承MyViewStorageMyView1(FormView, MyViewStorage)。然后通过简单地使用在其他两个类中创建的实例属性来处理方法。

  2. 通过首先在MyViewStorageMyView1类中创建初始实例参数来创建MyView2的实例

  3. 如下图所示

    def __init__(self, obj, user, form):
        self.obj = obj
        self.user = user
        self.form = form
    

    哪一个是首选方法?

1 个答案:

答案 0 :(得分:1)

这取决于您现在和将来对MyViewStorage使用什么样的用法

一个。如果您知道 MyViewStorage将仅用于 MyView1和MyView2等视图中,而不会用于其他任何地方。然后,在MyViewStorage本身和从中继承,传输存储在与存储相关的MyView1和MyView2中的所有公共代码非常有意义。

PS:您必须知道Python中的多重继承是如何工作的,它在父类中从左到右优先处理属性(即,如果左侧大多数类具有必需属性,则选择它)

B中。如果您认为 MyViewStorage类应该是通用类或可以具有许多额外功能,可以在任何地方使用,并且可以不时更改来制作它更通用,然后创建一个实例并使用它是非常有意义的(因为你不希望你的视图中的不需要的属性对你没用)

希望这有帮助