【发布时间】:2021-08-08 00:36:36
【问题描述】:
- 操作系统:Windows 10,64 位
- 编辑器:VSCode 1.56.2
- Python:3.9.0
我有一个带有year 属性的课程。
当我想 private 这个 property 时,似乎 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 新手,所以提前感谢您的帮助。
【问题讨论】:
-
Python 没有定义访问修饰符。
-
@Nicholas Hunter 抱歉,我听不懂。这意味着因为它是私有的,所以即使在类中我们也不能修改它?!还是对于私有属性,我们无法将其转换为属性?
-
你永远不会分配给
year,只有__year,所以永远不会调用setter。 -
@chepner 我把__放在方法之前,我的意思是
def __year(self):,但它给了我这个错误RecursionError: maximum recursion depth exceeded in comparison -
那是因为它定义了一个名为
__year的类属性,它隐藏了实例属性,所以你最终会得到无限递归。 getter 和 setter 是 only 应该直接访问self.__year的两个东西; 一切,包括其他方法,都应该通过该属性。
标签: python getter-setter object-property