使用@property装饰器时是否需要单独定义getter方法?
使用@property装饰器时是否需要单独定义getter方法?
哈哈,你说得太对了!这个额外的@config_dict.getter装饰器完全是多余的,属于画蛇添足的操作。
咱们来拆解下@property的工作逻辑:当你用@property装饰一个方法时,Python已经自动把这个方法当成了该属性的getter方法。你写的第一个config_dict方法,本身就承担了获取self._config_dict的职责。
而你后面用@config_dict.getter装饰的同名方法,本质上是把原来的getter替换成了一个逻辑完全相同的方法——两个方法都返回self._config_dict,没有任何区别,既没增加功能,也没优化逻辑,反而会让读代码的人疑惑:“这俩写重复了?是不是有什么特殊意图?”
如果真的需要自定义getter的逻辑,直接在第一个@property装饰的方法里写就够了。只有当你需要给这个属性添加setter或者deleter的时候,才需要用到@xxx.setter或@xxx.deleter装饰器,比如:
@property def config_dict(self): return self._config_dict @config_dict.setter def config_dict(self, value): # 这里可以添加参数验证逻辑 if not isinstance(value, dict): raise TypeError("config_dict必须是字典类型") self._config_dict = value
所以回到你的代码,完全可以删掉那个重复的getter方法,只保留第一个@property装饰的方法就足够了。
备注:内容来源于stack exchange,提问作者codeforester
相关产品推荐
相关产品推荐

