【发布时间】:2018-07-15 13:00:24
【问题描述】:
我听说使用 set_value() 和 get_value() 之类的 getter 和 setter 函数不是 Pythonic,最好将 property 对象与 setter 和 getter 一起使用。
我运行了下面的代码,我收到了一个错误'str' object is not callable'。当我搜索此错误时,我发现许多代码示例,其中类具有同名的属性和方法(例如,如果我在 __init__ 方法中编写 self.name 而不是 self.__name)。
但我在属性前使用了两个下划线 - 所以这里不应该出现这种情况。看起来当我尝试调用name.setter 时,我实际上调用了一个属性,并接收到存储在self.__name 中的字符串 - 然后我尝试调用其他内容。
但是为什么呢?在 setter 的所有示例中,它们与属性具有相同的名称,并且不会导致问题。为什么会在这里抛出错误,我该如何解决?
class Dog():
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, name_in):
self.__name = name_in
dog = Dog("Barbos")
print(dog.name) # this works
dog.name("Juchka") # and this throws an error:
# TypeError: 'str' object is not callable
【问题讨论】:
-
Setter 的用法如下:
dog.name = "Juchka" -
有一个 setter 来挂钩 assignment。你会使用
dog.name = "Juchka"。 -
你使用 setter 作为
dog.name = 'newname'。
标签: python class properties setter