当方法返回字符串时出现TypeError错误

3
代码有什么问题?当方法返回字符串类时,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

1
我怀疑这与您将title既作为变量名又作为函数名有关联。 - wnnmaw
1个回答

9

方法也是属性。您不能同时将名称title用于方法和属性。在您的实例中,您将self.title设置为字符串,而该字符串不可调用:

方法也是属性。您不能同时将名称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

请注意,我还使用了不同的名称来表示实例;您也不想掩盖类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接