方法返回字符串时获取 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的主要内容,如果未能解决你的问题,请参考以下文章

Java获取字符串信息

任何 util 类/方法来获取大字符串并返回 InputStream?

Java系统变量信息获取方法System.getenv()与System.getProperty()

Android 使用Retrofit获取JSON数据

从 C++ 库方法返回的“char*”获取 C# 字符串?

abp Application层获取请求的Header内容