Подскажите, почему я получаю данную ошибку? AttributeError: 'str' object has no attribute 'get_command'
Подскажите, почему я получаю данную ошибку? AttributeError: 'str' object has no attribute 'get_command'. Дело в том, что точно такая же запись метода det_command(), но вне класса Server, работает и записывает в текстовый файл данные пользовательского ввода.
Вот пример кода:
path_to_file = "qwerty.txt"
class Server:
def get_command(self):
abc = input("Введите значение:::")
return abc
class Handler:
def change_file(self, server_1):
with open(path_to_file, 'w') as f:
result = server_1.get_command()
f.write(result)
if __name__ == "__main__":
server = Server()
a = server.get_command()
handler = Handler()
handler.change_file(a)
Ответы (2 шт):
Когда Вы вызываете функцию handler.change_file(a), в качестве параметра server_1 Вы передаёте значение переменной a, которая является строкой (тип "string"). Потом внутри этого метода Вы пытаетесь у этой строки вызвать метод get_command, которого у строки нет.
Когда Вы вызываете метод server.get_comnand(), Вы вызываете его у объекта класса Server, который этот метод имеет.
Лучше давайте полный трейсбэк ошибки.
А дело в том, что a у нас после a = server.get_command() это обычная строка с ввёденными в input данными.
Потом a передаётся в метод change_file как аргумент server_1. И вы пытаетесь у этой строки вызвать метод get_command(), которой у неё нет. Отсюда и ошибка.
По поводу вашего вопроса в комментарии ниже даю вариант. Чтобы сохранить введенные данные классу можно добавить атрибут через self
path_to_file = "qwerty.txt"
class Server:
def get_command(self):
self.abc = input("Введите значение:::")
class Handler:
def change_file(self, data_to_write):
with open(path_to_file, "w") as f:
f.write(data_to_write)
if __name__ == "__main__":
server = Server()
server.get_command()
handler = Handler()
handler.change_file(server.abc)
Или как делали вы, но немного ошиблись:
path_to_file = "qwerty.txt"
class Server:
def get_command(self):
abc = input("Введите значение:::")
return abc
class Handler:
def change_file(self, server):
with open(path_to_file, "w") as f:
data_to_write = server.get_command()
f.write(data_to_write)
if __name__ == "__main__":
server = Server()
handler = Handler()
handler.change_file(server)