Найти - Пользователи
Полная версия: Создание класса, наследование, совсем новичок
Начало » Python для новичков » Создание класса, наследование, совсем новичок
1
fors-major
Добрый день! Пытаюсь потренироваться в наследовании на классическом примере животных. Но у меня видимо пробел в функциях класса, потому, что неправильно передаю переменные наверно.
Код такой
 class Animal():
    def __init__(self, numberoflegs, speech, taillength, height, speed):
        self.numberoflegs = numberoflegs
        self.speech = speech
        self.taillength = taillength
        self.height = height
        self.speed = speed
    def move(self):
        distance = int(input("Enter the distance in KM"))
        time = distance / speed
        print(f'This animal passed the distance for {time}')
    def speak(self):
        print(f'This animal says {speech}')
    def dangerous(self, bigteeth):
        if bigteeth and height > 60:
            print('This animal is dangerous, be carefull')
        else:
            print('This animal is not dangerous, stay calm')
class Cat(Animal):
    def __init__(self, numberoflegs, speech, taillength, height, speed):
        super().__init__(numberoflegs, speech, taillength, height, speed)
class Dog(Animal):
    def __init__(self, numberoflegs, speech, taillength, height, speed):
        super().__init__(numberoflegs, speech, taillength, height, speed)
class Bird(Animal):
    def __init__(self, numberoflegs, speech, taillength, height, speed):
        super().__init__(numberoflegs, speech, taillength, height, speed)

Ругается так:
Undefined variable ‘speed’
Undefined variable ‘speech’
Undefined variable ‘height’

Но я же определил эти переменные, что я не так делаю
rami
fors-major
Но я же определил эти переменные, что я не так делаю
Это где?

Возьмём функцию move(), локальные переменные distance и time определены, а локальная переменная speed где определена? Вы ранее определили атрибут класса self.speed, вот его и используйте. То же в других случаях.
CatGerman
Доброго дня!
Подскажите, пожалуйста, как понимать такой код:
 class One():
   def __init__(self, ...):
      self._some = Two
      ...
...
  def method(self, second):
      return self._some(self.first, second)
...
class Two()

Что происходит? Как понять self._some = Two? И вот это self._some(self.first, second)
CatGerman
А дальше еще и вот это:
  class One():
...
   def onemoremethod(self, p1, p2):
      return self.method(self[p1], self[p2])
...
CatGerman
Все вместе:
  class One():
   def __init__(self, ...):
      self._some = Two
      ...
...
  def method(self, first, second):
      return self._some(self.first, second)
...
  def onemoremethod(self, p1, p2):
     return self.method(self[p1], self[p2])
...
class Two():
  def __init__(self, a1, a2):
....

Почему self._some = Two без скобок и как это интерпретировать??? self - ???
CatGerman
Правильно я понимаю, что это вызов класса по ссылке и создание объекта происходит уже в method?
self - вызов какого-то метода класса Two?
CatGerman
 self[p1], self[p2]
fors-major
rami
Спасибо за помощь!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB