"@setter" "@property"装饰器与常用方法的区别



我正在学习python。具体来说,它是关于类中的get和set方法。我脑海中突然出现的问题是:@property和@var.setter装饰器与常规setter之间有什么区别(除了调用本身(。示例:

class Car:
def __init__(self, mark):
self.mark = mark
self.__year = None
def get_year(self):
return self.__year
def set_year(self, y):
if y<2000:
self.__year = "Old"
else:
self.__year = "New"
audi = Car("Audi")
audi.set_year(2005)
print(audi.get_year())

class Car:
def __init__(self, mark):
self.mark = mark
self.__year = None
@property
def year(self):
return self.__year
@year.setter
def year(self, y):
if y<2000:
self.__year = "Old"
else:
self.__year = "New"
audi = Car("Audi")
audi.year = 2005
print(audi.year)

唯一的区别是打电话?里面还有别的东西吗?

感谢您解释

是的,主要区别在于访问值的方式。使用具有该属性的setter可以进行验证,就像您提供的示例一样。

编辑:属性的另一个好处是,它允许您将现有的类变量转换为属性,而不必修改使用这些变量的代码

有关属性decorator的更多信息,请参阅此链接。

最新更新