Python调用;“自我财产”;并创建一个返回“quot;自我财产;?

Python调用;“自我财产”;并创建一个返回“quot;自我财产;?,python,django,python-3.x,Python,Django,Python 3.x,假设我有一门课是这样的: class SomeClass: some_property = 'property' def get_some_property(self): return self.some_property def some_method(self): pass class FormMixin(ContextMixin): """Provide a way to show and handle a form i

假设我有一门课是这样的:

class SomeClass:
    some_property = 'property'

    def get_some_property(self):
        return self.some_property

    def some_method(self):
        pass
class FormMixin(ContextMixin):
    """Provide a way to show and handle a form in a request."""
    initial = {}
    form_class = None
    success_url = None
    prefix = None

    ...

    def get_form_class(self):
        """Return the form class to use."""
        return self.form_class

    def get_form(self, form_class=None):
        """Return an instance of the form to be used in this view."""
        if form_class is None:
            form_class = self.get_form_class()
        return form_class(**self.get_form_kwargs())
var1
var2
在以下方面有什么区别(如果有):

    def some_method(self):
        var1 = self.some_property
        var2 = self.get_some_property()

对于这个问题的一个不太抽象的例子,考虑<代码> FixMyIn < /Cux>类在<代码> Django.Guang.VIEW.Eng/<代码>中,它看起来像这样:

class SomeClass:
    some_property = 'property'

    def get_some_property(self):
        return self.some_property

    def some_method(self):
        pass
class FormMixin(ContextMixin):
    """Provide a way to show and handle a form in a request."""
    initial = {}
    form_class = None
    success_url = None
    prefix = None

    ...

    def get_form_class(self):
        """Return the form class to use."""
        return self.form_class

    def get_form(self, form_class=None):
        """Return an instance of the form to be used in this view."""
        if form_class is None:
            form_class = self.get_form_class()
        return form_class(**self.get_form_kwargs())

方法
get\u form\u class
返回self的
form\u class
属性,但这与调用
self不完全相同。form\u class

使用函数可以很容易地让不同的类具有相同的接口,但实现不同。一些实现可能将值存储在属性中,而其他实现则必须计算该值

这方面的一个经典演示是使用笛卡尔坐标或极坐标表示向量的两个类。通过使用方法访问坐标,可以交换坐标

import math

class cartesian_vector():
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def getX(self):
        return self.x
    def getY(self):
        return self.y
    def getR(self):
        return math.sqrt(self.x**2 + self.y**2)
    def getTheta(self):
        return math.atan(self.y/self.x)

class polar_vector():
    def __init__(self, r, theta):
        self.r = f
        self.theta = theta
    def getX(self):
        return self.r * math.cos(self.theta)
    def getY(self):
        return self.r * math.sin(self.theta)
    def getR(self):
        return self.r
    def getTheta(self):
        return self.theta

其思想是允许开发人员将这些通用视图子类化,从而能够覆盖这种行为。是的,默认情况下只返回属性,但在某些情况下,您可能希望返回form_类dynamic@IainShelvington您是否仍然可以通过调用
self.form\u class='something'
而不使用
get\u form\u class
动态更改
表单类
?是,这是可能的,但是你会把这样的代码放在哪里呢?在一个名为get\u form\u class的方法中,有动态获取form\u类的代码是非常好和干净的。这是最后的设计决定day@juanpa.arrivillaga实际上,许多OO语言都有“getter”和“setter”,允许您自定义属性访问。但这是基本原则。