方法返回字符串时获取 TypeError
Posted
技术标签:
【中文标题】方法返回字符串时获取 TypeError【英文标题】:Getting a TypeError when method returns string 【发布时间】:2015-02-17 10:02:22 【问题描述】:代码有什么问题? Python 在方法返回类字符串时返回 TypeError。
class window:
def __init__(self, title='window'):
self.title = title
def title(self, title):
if title:
self.title = title
else:
return self.title
window = window()
window.title('changed')
print(window.title())
错误:
Traceback (most recent call last):
File "C:/Users/Danilo/Desktop/pygtk.py", line 10, in <module>
window.title('changed')
TypeError: 'str' object is not callable
【问题讨论】:
我怀疑这与您使用title
作为变量和函数的名称有关
【参考方案1】:
方法也是属性。您不能将名称 title
同时用于方法和属性。在您的实例上,您将 self.title
设置为一个字符串,这是不可调用的:
>>> class window:
... def __init__(self, title='window'):
... self.title = title
... def title(self, title):
... if title:
... self.title = title
... else:
... return self.title
...
>>> window().title
'window'
>>> window().title()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
Python 无法再找到类上的方法,因为该实例具有同名的属性。
重命名属性;例如使用下划线:
class window:
def __init__(self, title='window'):
self._title = title
def title(self, title):
if title:
self._title = title
else:
return self._title
如果您希望title
参数是可选的,您应该使用关键字参数:
def title(self, title=None):
if title:
self._title = title
else:
return self._title
现在title
将默认为None
,您的if title
测试将正常工作:
>>> window_instance = window()
>>> window_instance.title('changed')
>>> print(window_instance.title())
changed
请注意,我还为实例使用了不同的名称;你也不想屏蔽这个类。
【讨论】:
以上是关于方法返回字符串时获取 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
任何 util 类/方法来获取大字符串并返回 InputStream?