Ошибка атрибута при использовании объектно-ориентированного программирования в Python - PullRequest
0 голосов
/ 16 апреля 2019

Я получаю ошибку атрибута при запуске основной функции.Я вызываю класс из отдельного файла.Ошибка говорит о том, что в объекте Drone отсутствует атрибут 'height'.

Я инициировал атрибут в объекте класса в файле drone.py.Я тогда называю это с Drone импорта DroneЯ не вижу, в чем заключается моя проблема.Я играю с ним часами.

# drone.py

class Drone:
    def _init_(self):
        self.height = 0.0
        self.speed = 0.0

    def accelerate(self):
        self.speed = self.speed +10

    def decelerate(self):
        if self.speed >= 10:
            self.speed = self.speed -10

    def ascend(self):
        self.height = self.height +10

    def descend(self):
        if self.height >= 10:
            self.height = self.height -10

# fly_drone.py

from drone import Drone

def main():
    drone1 = Drone()
    operation = int(input("Enter 1 for accelerate, 2 for decelerate, 3 for ascend, 4 for descend, 0 for exit:"))
    while operation != 0:
        if operation == 1:
            drone1 = drone1.height
            drone1.ascend()
            print("Speed:", drone1.speed, "Height:", drone1.height)

main()

Я пытаюсь достичь: Скорость: 0 Высота: 10

Это мое сообщение об ошибке:

Enter 1 for accelerate, 2 for decelerate, 3 for ascend, 4 for descend, 0 for exit:1
Traceback (most recent call last):
  File "C:/Python Projects/CSC121Lab13/fly_drone.py", line 12, in <module>
    main()
  File "C:/Python Projects/CSC121Lab13/fly_drone.py", line 8, in main
    drone1 = drone1.height
AttributeError: 'Drone' object has no attribute 'height'

Process finished with exit code 1

1 Ответ

4 голосов
/ 16 апреля 2019

Я полагаю, это потому, что вы используете только одно подчеркивание (_) вокруг init вместо необходимого двойного подчеркивания.Таким образом, искажение имени не будет работать должным образом, что означает, что инициализация свойства высоты не будет иметь место.

Следовательно, решение состоит в следующем: -

class Drone:
    def __init__(self):
        self.height = 0.0
        self.speed = 0.0

Подробнее см. Здесьна подчеркиваниях https://stackoverflow.com/a/1301369/11329170

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...