Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “错误”';str';对象不可调用";使用属性设置器时_Python_Python Decorators - Fatal编程技术网

Python “错误”';str';对象不可调用";使用属性设置器时

Python “错误”';str';对象不可调用";使用属性设置器时,python,python-decorators,Python,Python Decorators,我正在尝试使用一个属性设置器,如下所示。我在这里举一个例子: 吸气剂工作得很好 >>> contact = Contact() >>> contact.funds 0.0 但我遗漏了二传手的一些东西: >>> contact.funds(1000.21) Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versi

我正在尝试使用一个属性设置器,如下所示。我在这里举一个例子:

吸气剂工作得很好

>>> contact = Contact()
>>> contact.funds
0.0
但我遗漏了二传手的一些东西:

>>> contact.funds(1000.21)

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1315, in __run
    compileflags, 1) in test.globs
  File "<doctest __main__.Contact[2]>", line 1, in <module>
    contact.funds(1000.21)
TypeError: 'str' object is not callable
联系基金(1000.21) 回溯(最近一次呼叫最后一次): 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py”,第1315行,正在运行 test.globs中的compileflags,1) 文件“”,第1行,在 联络基金(1000.21) TypeError:“str”对象不可调用
我做错了什么?

只需使用
contact.funds=1000.21
语法即可。它将使用
@funds.setter
进行设置

我无法重现您的
“str”对象不可调用的错误,而是得到了
“float”对象不可调用的错误。关于如何运行的更多细节将有助于诊断。无论如何,原因是
contact.funds
将返回
contact.\u funds
的值,该值不是可调用对象,因此出现错误。

并且已经显示了语法。我会深入一点来解释发生了什么

@property
装饰器正好存在,因此您可以通过方便的
x=object.field
object.field=value
语法获取和设置对象字段。因此,您已经正确地完成了所有操作,使您的
联系人.funds()
getter成为
contact.funds
,使您的
contact.funds(value)
setter成为
contact.funds=value

混淆之处在于
@属性
装饰器重新定义了联系人对象中的符号。换句话说,
contact.funds
是一个。将
@funds.setter
装饰器应用于
def funds(self,value):
后,
funds
函数将不再存在。因此
contact.funds(value)
首先返回
contact.funds
属性,然后尝试调用它,就像调用函数一样


希望有帮助

contact.funds=1000.21这并不能回答他关于他做错了什么的问题here@APorter1031虽然我认为这个问题的答案是不言自明的,但我已经更新了我的答案以反映这一点。@MoxieBall,很抱歉我简化了代码,将其归结为最简单的形式。在返回之前,我正在修改字符串。我取出它并将其更改为int,但从未更新错误消息。谢谢你提供答案。谢谢你的额外澄清。
>>> contact.funds(1000.21)

Traceback (most recent call last):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/doctest.py", line 1315, in __run
    compileflags, 1) in test.globs
  File "<doctest __main__.Contact[2]>", line 1, in <module>
    contact.funds(1000.21)
TypeError: 'str' object is not callable