python - 如何为python类中的私有属性编写getter-setter方法?
问题描述
- 操作系统:Windows 10、64 位
- 编辑器:VSCode 1.56.2
- 蟒蛇:3.9.0
我有一堂year
有财产的课。
当我想私有这个属性时,似乎使用 @property 和 @year.setter 装饰器编写的get和set函数不起作用。
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
顺便说一句,除非您明确想要名称修改,否则使用双前导下划线是一个坏主意。
推荐阅读
- python - 将复选框数据和文本输入数据保存到 .Json 文件
- reactjs - Redux 单态更新
- python - 在 Django 中按第一个外键排序
- html - 悬停内部元素时如何隐藏容器div标题?
- wordpress - 如何限制用户在 24 小时内仅登录一次?在 WordPress 中
- lldb - lldb 是否可以在断点检查已写入文件的内容或它生成/使用的 IPC 机制中的数据?
- sharepoint - 如何使用powershell脚本从sharepoint中的自定义列表中删除10000个项目
- python - 什么是更改大文件的有效方法
- java - Java 程序 - 使用 For 循环的插入排序
- c# - C# 表达式:数据表的 SQL/LINQ 动态排序