Ahmad Qassym Ответов: 2

Я не могу запустить программу из - за ошибки в inehriting


  1  class Grandfather:
  2      last = 'wilson'
  3      citizenship = 'american'
  4      residence = 'Detroit'
  5      def __init__(self,first,college,age,career,workplace):
  6          self.first = first
  7          self.college = college
  8          self.age = age
  9          self.career = career
 10          self.workplace = workplace
 11          self.email = first + '-' + Grandfather.last + '@email.com'
 12      @property
 13      def fullname(self):
 14          return '{} {}'.format(self.first,Grandfather.last)
 15      def __str__(self):
 16          return '{} {}'.format(self.first,self.last)
 17      @property
 18      def history(self):
 19         return 'my name is : {}, i graduated from {} and work as {} in {}'.format\
 20             (self.fullname,self.college,self.career,self.workplace)
 21      @classmethod
 22      def set_residence(cls,newR):
 23          cls.residence = newR
 24      @classmethod
 25      def set_cit(cls,new_cit):
 26          cls.citizenship = new_cit
 27      
 28  
 29  
 30  
 31  class Father(Grandfather):
 32      def __init__(self,first,college,age,career,workplace,sport,wife):
 33          super().__init__(first,college,age,career,workplace)
 34          self.sport = sport
 35          self.wife = wife
 36  
 37  
 38  class Son(Father):
 39      def __init__(self,first,college,age,career,workplace,Vedio_Game,Car):
 40          super().__init__(first,college,age,career,workplace)
 41          self.Vedio_Game = Vedio_Game
 42          self.Car = Car
 43  
 44  john = Grandfather('john','stanford',70,'engineer','Ford')
 45  mark = Father('mark','MIT',40,'CScientist','SONY','Tennis','Sara')
 46  Anna = Aunt('Anna','Cambridge',38,'Teacher','school','black','Basketball')
 47  Maik = Son('Maik','MIT',26,'SoftwareEngineer','Google','MineCraft','Toyota')
 48  if __name__ == '__main__':
 49      print(john.fullname)
 50      print(john)
 51      print(john.history)
 52      Grandfather.set_residence('Frankfurt')
 53      print(Grandfather.residence)
 54      print('############')
 55      print(mark.fullname)
 56      print(mark)
 57      print(mark.history)
 58      print(mark.residence)
 59      print('###########')
 60      print(Maik.fullname)
 61      print(Maik)
 62      print(Maik.residence)


Что я уже пробовал:

я попытался выполнить программу, но она выдает ошибку :
Traceback (most recent call last):
  File "my_Errors.py", line 66, in <module>
    Maik = Son('Maik','MIT',26,'SoftwareEngineer','Google','MineCraft','Toyota')
  File "my_Errors.py", line 40, in __init__
    super().__init__(first,college,age,career,workplace)
TypeError: __init__() missing 2 required positional arguments: 'sport' and 'wife'

Richard MacCutchan

Также отредактировал свой вопрос, чтобы мы действительно могли видеть, какие строки 66 и 40. Хотя, очевидно, некоторые строки отсутствуют.

2 Ответов

Рейтинг:
14

Richard MacCutchan

Это тот же вопрос, что и ваш предыдущий вопрос в Почему многоуровневое наследование не работает ?[^]. Вы должны передать правильное количество параметров в суперкласс, как четко указано в сообщении об ошибке. Если вы не понимаете, как работают классы и наследование, то смотрите 9. Классы — Питон 3.7.8rc1 документации[^].


Ahmad Qassym

thanx для ответа, но это не то же самое, в предыдущем я предоставил классу the son все атрибуты экземпляра класса father(существующие атрибуты сына в этом вопросе и спорт и жена)
что я пытаюсь узнать через этот вопрос, Можем ли мы написать класс сына без всех атрибутов класса отца (спорт и жена)

Richard MacCutchan

Да, это точно такая же проблема. Проблема в том, что, как предлагает марккук ниже, вы все еще не понимаете, для чего нужно наследование.

Рейтинг:
10

markkuk

Я думаю, что вы действительно не понимаете, что означает "наследование" в объектно-ориентированном программировании (это не способ описания семейных деревьев). Наследование описывает отношение "is-a" между подклассом и родительским классом. В вашем коде иерархия классов требует, чтобы каждый "сын" был также "отцом" и "дедушкой". В этом случае кажется, что вы описываете отношение типа "имеет-А", которое описывается с помощью композиция[^] вместо наследование[^]


Ahmad Qassym

спасибо за ответ
что я пытаюсь узнать через этот вопрос, Можем ли мы написать класс сына без всех атрибутов класса отца (спорт и жена)

markkuk

Нет, подкласс может только добавлять свойства или функциональные возможности к родительскому классу, а не удалять их.

Ahmad Qassym

я видел этот пример в интернете:
u сказал, что подкласс может только добавлять свойства в суперкласс, но не удалять их..но в Примере htis он удалил свойства.
а ты знаешь почему ?
класс четырехугольник:
деф __инит__(самостоятельная, А, B, С, D):
самостоятельно.стр. 1=а
самостоятельно.норвежское издание side2=Ъ
самостоятельно.side3=с
самостоятельно.side4=д
класс прямоугольник(четырехугольник):
деф __инит__(самостоятельная, а, б):
super().__init__(a, b, a, b)


вот ссылка
https://www.tutorialsteacher.com/python/inheritance-in-python

Ahmad Qassym

ты имеешь в виду что мы не можем просто писать
деф __инит__(самостоятельная,во-первых,училище,возраст,карьера,рабочее место,Vedio_Game,автомобиль):
мы должны добавить к ним (спорт,жена) атрибуты, которые существуют в суперклассе отца ?