如何为python类中的私有属性编写getter-setter方法?

问题描述

  • 操作系统:Windows 10,64 位
  • 编辑器:VSCode 1.56.2
  • Python:3.9.0

我有一个带有 year 属性的类。

当我想私有这个属性时,似乎getset函数使用@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)