假设我有一个这样的类(class):
class SomeClass:
some_property = 'property'
def get_some_property(self):
return self.some_property
def some_method(self):
pass
var1
和 var2
之间有什么区别(如果有):
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/