问题描述
- 操作系统:Windows 10,64 位
- 编辑器:VSCode 1.56.2
- Python:3.9.0
当我想私有这个属性时,似乎get和set函数使用@property 和 @year.setter 装饰器不起作用。
class Ab():
def __init__(self,year):
self.__year = year
print(self.__year)
@property
def year(self):
return self.__year
@year.setter
def year(self,y):
if y < 8:
self.__year = 0
else:
self.__year = y
a = Ab(5)
实际输出:5
预期输出:0
我是 Python 新手,所以在此先感谢您的帮助。
解决方法
您实际上从未修改过 Ab.year
:
class Ab():
def __init__(self,year):
self.__year = year
self.year = year # <-- this needs to be here
print(self.__year)
@property
def year(self):
return self.__year
@year.setter
def year(self,y):
if y < 8:
self.__year = 0
else:
self.__year = y
a = Ab(5)
>>> 0
顺便说一句,除非您明确想要名称修改,否则使用双前导下划线是个坏主意。
,您需要在 __init__
-- 而不是 dunder 私有属性中引用 setter。
class Ab():
def __init__(self,year):
self.year = year
print(self.__year)