Vererbung von Klassen in Python mit super()?

Hallo Community,

ich habe hier jetzt schon oft gefragt, was diese drei Zeilen bedeuten:

class HangmanGame(BoxLayout):
      def __init__(self, **kwargs):
          super().__init__(**kwargs)

Den gesamten Code gibt es hier zum nachlesen:
https://www.gutefrage.net/frage/wozu-das-super-initkwargs

Jetzt habe ich schon viele Antworten bekommen, vor allem von regex9 und KarlRanseierlll denen ich hier auch noch mal danken möchte.

Aber ich habe es immer noch nicht ganz verstanden und ich bin inzwischen echt verzweifelt. Ich habe aber ein Video dazu gefunden, was ich hier eben verlinke:
https://www.youtube.com/watch?v=QUHnJrFouv8&list=PLzMcBGfZo4-kSJVMyYeOQ8CXJ3z1k7gHn

Konkret geht es um Minute 1:10-3:50. Da sagt er ja, man wisse nicht, wie viele Argumente man bekommt.

Dazu habe ich dann auch direkt meine erste Frage. Ich verstehe nämlich nicht, welche Argumente er meint. Die in der __init__() Methode der Klasse, oder die die man beim erstellen einer Instanz in den Klammer übergeben kann, oder ganz andere? Und wen er die beim erstellen der Instanz meint, frage ich mich, warum nur diese übergeben werden und nicht auch die aus der __init__()-Methode.

Meine zweite Frage wäre dann, ob die beiden Zeilen überhaupt zusammenhängen, oder ob in der Zeile mit dem super() andere kwargs gemeint sind.

Und meine dritte und letzte Frage wäre, warum man diese kwargs-Argumente an die Basisklasse BoxLayout übergeben muss. Bei dieser Frage bitte ich um eine ausführliche aber einfache Antwort. Ich bin nämlich erst 14 und echt nicht der beste in Python. Diese Frage aber bitte nur beantworten wenn Sie sich wirklich damit auskennen oder schon Erfahrung mit Kivy haben.

Ich würde mich unfassbar über jede Antwort freuen. Auch wenn ich weiß, dass ich schon öfter gefragt habe😁. Aber ich muss mich halt erst mal da reinarbeiten.

Viele Grüße

Code Snake🙂

programmieren, Programmiersprache, Python, Python 3, Objektorientierte Programmierung
Linux für Kinder / Programmieren mit Scratch 3?

Ich habe einen 8 jährigen Neffen, der wenn er groß ist gerne „Spieleprogrammierer“ werden will. Also hab ich mir überlegt, ihm einen Laptop mit Linux zu schenken und ein Buch für Kinder, zu der Programmiersprache Scratch 3. Jetzt wollte ich mal fragen, was es noch für spezielle Linux Distros gibt, die für Kinder empfehlenswert sind. Kenne noch von früher Edubuntu und Qimo. Das Qimo Projekt wurde eingestellt und Edubuntu richtet sich wohl heute mehr an Schulklassen. Für den 8 jährigen könnte ich vielleicht Edubuntu nehmen, allerdings hab ich noch einen 4 jährigen Neffen, dem ich eins meiner alten Netbooks geben möchte, quasi als Lerncomputer. Da er auch gerne einen eigenen Laptop möchte. Wichtig wäre, dass es eine Distro ist, die auch noch auf alter 32 Bit Hardware läuft. Prozessor ist ein Intel Atom. Die Distro sollte schon etwas verspielt sein, passend für kleine Kinder und auch Lernspiele enthalten, die ein Kind in dem Alter spielen kann. Man könnte natürlich auch eine normale Distro nehmen und die entsprechend anpassen, aber wenn es schon fertige und durchdachte Distros für Kinder gibt, spart man sich das und es sieht vielleicht auch besser aus.

Und zum Thema Scratch 3:

Wie könnte man anfangen? Gibt es mittlerweile eigentlich wieder eine lokal installierbare Version von Scratch für Linux? Nach der Umstellung damals gab es diese ja anfangs nur für Windows und Mac und für Linux nur eine Browser Version. Auf der Scratch Seite selbst ist keine Download Version für Linux (außer Android) zu finden, aber vielleicht gibts da ja einen Trick, es doch installiert zu bekommen, so dass es voll funktionsfähig und lokal auf der Festplatte ist.

Kaufen wollte ich ihm dieses Buch: https://www.ebay.de/itm/225581226065?epid=22054114427&hash=item3485b05851:g:GX4AAOSwke9kZSiO

Oder wäre ein anderes besser geeignet?

Er soll ja Interesse daran entwickeln und Spaß dabei haben und es auch verstehen können.

Bild zum Beitrag
Kinder, Notebook, Linux, programmieren, Ubuntu, Netbook, Programmiersprache, Spieleprogrammierung, Linux-Distribution
Wozu das super()-__init__(**kwargs)?

Bei dem Code im Anhang, der Hangman als Python App mit dem Kivy Framework erstellt, weiß ich nicht wozu man die Zeile mit dem super() braucht. Also warum muss man die **kwargs Argumente an die Basisklasse weitergeben?

class HangmanGame(BoxLayout):    
    def __init__(self, **kwargs):
            super().__init__(**kwargs)
            self.word_list = ["python", "java", "ruby", "javascript", "php"]
            self.guess_word = []
            self.secret_word = ""
            self.remaining_guesses = 6
        self.img_path = "img/hangman_{}.png"
        self.create_game_layout()
        self.new_game()


    def create_game_layout(self):
        self.orientation = "vertical"
        self.image = Image(source=self.img_path.format(0))
        self.word_label = Label(text=" ".join(self.guess_word),
                                font_size="50sp",
                                halign="center",
                                valign="middle")
        self.remaining_guesses_label = Label(text=f"Remaining guesses: {self.remaining_guesses}")
        self.input_label = Label(text="Enter a letter:")
        self.input = TextInput(multiline=False)
        self.submit_button = Button(text="Submit", 

#Hier fehlt was unwichtiges, weil die Frage zu lang war

    def new_game(self):
        self.secret_word = random.choice(self.word_list)
        self.guess_word = ["_"] * len(self.secret_word)
        self.remaining_guesses = 6
        self.image.source = self.img_path.format(0)
        self.input.text = ""
        self.word_label.text = " ".join(self.guess_word)
        self.remaining_guesses_label.text = f"Remaining guesses: {self.remaining_guesses}"


    def check_letter(self, instance):
        letter = self.input.text
        if letter in self.secret_word:
            for i, c in enumerate(self.secret_word):
                if c == letter:
                    self.guess_word[i] = letter
            if "_" not in self.guess_word:
                self.end_game(True)
        else:
            self.remaining_guesses -= 1
            self.image.source = self.img_path.format(6 - self.remaining_guesses)
            self.remaining_guesses_label.text = f"Remaining guesses: {self.remaining_guesses}"
            if self.remaining_guesses == 0:
                self.end_game(False)
        self.input.text = ""
        self.word_label.text = " ".join(self.guess_word)


    def end_game(self, victory):
        message = "Congratulations, you won!" if victory else f"Sorry, the word was {self.secret_word}."
        self.remaining_guesses_label.text = message
        self.remove_widget(self.input_label)
        self.remove_widget(self.input)
        self.remove_widget(self.submit_button)
        self.add_widget(Button(text="New Game", on_press=self.new_game))



class HangmanApp(App):


    def build(self):
        Window.clearcolor = (0.5, 0.5, 0.5, 1)
        return HangmanGame()


HangmanApp().run()
programmieren, Python, Instanz, Python 3, Objektorientierte Programmierung

Meistgelesene Fragen zum Thema Programmieren