Как правильно использовать super () .__ init__ при передаче аргументов? - PullRequest
0 голосов
/ 06 ноября 2019

Я относительно новичок в ООП в Python и создаю небольшую программу, чтобы начать работу. Проблема в том, что когда я создаю объект, независимо от того, сколько позиционных аргументов я использую, у меня появляется ошибка с количеством аргументов.

Поскольку я довольно новичок в этой области программирования, яЯ не совсем уверен, что попробовать, но я попытался поэкспериментировать с этапами инициализации атрибута, однако это полностью отключает программу.

Программа:

import random


class character:
    def __init__(self, name, skill, brains, home, strength, force):
        self.name = name
        self.skill = skill
        self.brains = brains
        self.home = home
        self.strength = strength
        self.force = force


class force_user(character):
    def __init__(self, name, skill, brains, home, strength, force, dark_force, light_force):
        super().__init__(self, name, skill, brains, home, strength, force)
        self.dark_force = dark_force
        self.light_force = light_force


class jedi(force_user):
    def __init__(self, name, skill, brains, home, strength, force, dark_force, light_force, master, rank):
        super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)
        self.master = master
        self.rank = rank


a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo", 'Grand Master')

Ошибки:

Когда у меня есть аргумент 'Grand Master' 'rank' в объекте 'a', я получаю это сообщение:

Traceback (most recent call last):
  File [file directory], line 37, in <module>
    a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo", 'Grand Master')
  File [file directory], line 32, in __init__
    super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)
TypeError: __init__() takes 9 positional arguments but 10 were given

и когда я удаляю аргумент 'Grand Master', я получаю этоошибка:

Traceback (most recent call last):
  File [File Directory, line 37, in <module>
    a = jedi('Yoda', 46, 17, 'Dagobah', 34, 97, 2, 10, "N'Kata Del Gormo")
TypeError: __init__() missing 1 required positional argument: 'rank'

Я сам не совсем понимаю проблему, но любая помощь или совет будут полезны!

1 Ответ

2 голосов
/ 06 ноября 2019

Вы должны изменить

super().__init__(self, name, skill, brains, home, strength, force, dark_force, light_force)

на

super().__init__(name, skill, brains, home, strength, force, dark_force, light_force)

Вам не нужно передавать self (первый аргумент) при использовании нестатических методов экземпляра.

Для большей ясности: если бы у вас был этот метод в jedi

def printName(self):
    print(self.name)

, вы бы просто вызвали его с помощью a.printName(), а не a.printName(a).

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