微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何为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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。