使用@property装饰器时无法调用setter的问题求助
问题解决:@property装饰器无法调用setter的问题
你的代码里setter方法的名称错误,是导致无法赋值的核心原因。使用@property装饰器时,对应的setter方法必须和被装饰的属性方法同名,而不是自定义成set_name。
修正后的代码
class Worker: def __init__(self, name): self.__name = name @property def name(self): return self.__name # 方法名必须和@property装饰的方法一致,才能关联为setter @name.setter def name(self, new_name): self.__name = new_name worker1 = Worker('A') print(worker1.name) worker1.name = 'B' print(worker1.name)
原理说明
@property把name方法包装成了只读属性,要让它支持赋值操作,必须用@name.setter装饰一个同名方法(即def name(self, new_name))。- 你之前写的
set_name方法无法和name属性建立关联,Python会默认name是只读属性,所以执行worker1.name = 'B'时会抛出AttributeError。
内容的提问来源于stack exchange,提问作者Folium
相关产品推荐
相关产品推荐

