Я получаю «AttributeError: объект« str »не имеет атрибута« модель »» в строке 26. Я не могу понять, почему? не понял как исправить?
import time
import threading
def test(name,name2):
print(name)
print(name2)
car.show(name)
car.color(name2)
time.sleep(30)
class car():
def __init__(self, model, color):
self.model = model
self.color = color
def show(self):
print("Model is", self.model )
print("color is", self.color )
audi = car("audi a4", "blue")
ferrari = car("ferrari 488", "green")
acura = car("acura" , "black")
BMW = car("BMW" , "blue")
Cadillac = car("Cadillac", "green")
f = open("/home/stuff/script/QT/car.txt", "r") #In car.txt file has car model and color list line by line
threads = []
for x in range (5):
name=(f.readline())
name=name.strip()
name2=(f.readline())
name2=name2.strip()
info = threading.Thread (target=test(name,name2))
threads.append(info)
info.start()
x= +x;
f.close()
Кажется, что вы никогда не создаете экземпляр объекта. Вы должны сделать это, прежде чем сможете вызывать show для объекта.





Сделайте отступ в методе show. В настоящее время он находится за пределами класса car, и, следовательно, проблема, скорее всего, в том, что вы передаете параметр self функции, а не методу класса. Итак, self оценивается как строка, и когда вы печатаете ее с помощью self.model, она выдает исключение
runfile('/home/stuff/script/QT/temp.py', wdir='/home/stuff/script/QT') audi blue Traceback (последний последний вызов): File "/home/stuff/script/QT /temp.py", строка 49, в <module> info = threading.Thread (target=test(name,name2)) File "/home/stuff/script/QT/temp.py", строка 15, в тестовом автомобиле .показать(имя)
выше моя ошибка. У меня нет ошибки в проблеме с вкладкой, потому что Spyder подхватывает.
@otay Нет, так как синтаксис правильный, и вы можете добавить функцию вне класса также в python.
у вас проблема в этих строках:
car.show(name)
car.color(name2)
автомобиль - это class (и, кстати, принято использовать автомобиль)
car.show — это просто функция, и вы передаете ей строку,
например, 'car.show('blue')', который приводит к сбою self.model, потому что 'blue'.model неисправен.
Я почти уверен, что вы хотели создать экземпляр автомобиля в своей тестовой функции. с:
the_car = car(name, name2)
the_car.show()
Спасибо! за поправьте меня по условности класса Автомобиль не автомобиль. кажется, что функция print(name) и print(name2) действительно получает строку из txt-файла, но я не могу перейти в Car.show(name). Я новичок в этом.
Теперь посмотрите на это, у вашего кода есть несколько проблем.
Во-первых, в методе тестирования внесите следующие изменения. Прямо сейчас в вашем классе автомобилей нет метода цвета. У него есть только поле цвета, к которому вы можете получить доступ
def test(name,name2):
print(name)
print(name2)
some_car = car(name, name2)
some_car.show()
print(some_car.color)
time.sleep(30)
если вы каким-то образом хотите передать arg методу show, используйте следующую сигнатуру метода
def show(self, name)
первый параметр, если метод класса является ссылкой на тот же объект. Подробнее о классах Python3 см. здесь
Большое спасибо. Да. кажется, я не мог понять концепцию передачи arg для метода show. Еще раз спасибо.
Вам необходимо правильно отформатировать код с правильным отступом. Также предоставьте полную трассировку стека (полное сообщение об ошибке). Вам также необходимо предоставить минимальный воспроизводимый пример. В настоящее время в вашем коде много того, что, похоже, не используется.