0
  • 操作系统:Windows 10、64 位
  • 编辑器:VSCode 1.56.2
  • 蟒蛇:3.9.0

我有一堂year有财产的课。

当我想私有这个属性时,似乎使用 @property 和 @year.setter 装饰器编写的getset函数不起作用。

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新手,所以提前感谢您的帮助。

4

2 回答 2

2

您从未真正修改过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

顺便说一句,除非您明确想要名称修改,否则使用双前导下划线是一个坏主意。

于 2021-05-18T18:29:54.860 回答
1

您需要在您的__init__- 而不是 dunder 私有财产中引用 setter。

class Ab():
    def __init__(self, year):
        self.year = year
        print(self.__year)
于 2021-05-18T18:28:56.847 回答