首页 > 解决方案 > 如何为python类中的私有属性编写getter-setter方法?

问题描述

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

标签: pythongetter-setterobject-property

解决方案


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

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


推荐阅读