Python 调用 "self.property"和创建返回 "self.property"的方法有什么区别?

标签 python django python-3.x

假设我有一个这样的类(class):

class SomeClass:
    some_property = 'property'

    def get_some_property(self):
        return self.some_property

    def some_method(self):
        pass

var1var2 之间有什么区别(如果有):

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

对于这个问题的一个不太抽象的示例,请考虑 django.generic.views.edit 中的 FormMixin 类,它看起来像这样:

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_form_class返回self的form_class属性,但这不是和调用self.form_class完全相同吗?

最佳答案

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

对此的一个经典演示是使用笛卡尔坐标或极坐标表示向量的两个类。通过使用方法访问坐标,您可以互换它们。

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

关于Python 调用 "self.property"和创建返回 "self.property"的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57897627/

相关文章:

python - 如何创建一个用随机字符串填充列的 Pandas 数据框?

python - NumPy 数组索引错误 : index 99 is out of bounds for axis 0 with size 1

python - 将奇怪的门控快速应用于 pandas 数据

django - Django View 中表单提交的不同重定向

java - 如何在网站中存储所有用户 Activity ..?

Django 序列化程序不存在 'geojson' ?

python - 从简单的 pandas 数据帧创建矩阵

python - 更改 CSV 列中的数据格式

python - 是否可以将坐标拟合到 OSMnx 中的街道?

python - Python 中的递归冒泡排序 - 返回 "None"