Методы атрибуты тоже. Вы не можете повторно использовать имя 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
Обратите внимание, что я также использовал другое имя для экземпляра; вы также не хотите маскировать класс.
Я подозреваю, что это связано с тем, что вы используете '' 'title''' как имя как переменной, так и функции – wnnmaw