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
Warum werden in diesem Code Klassen verwendet?

Also was für einen Vorteil hat das?:

Der Code ist für ein Tic-Tac-Toe-Spiel

class Board():
    def __init__(self):
        self.state = [0, 0, 0, 0, 0, 0, 0, 0, 0]

    def make_turn(self, cell, player):
        if self.is_valid_turn(cell):
            self.state[cell] = player.symbol
            return True
        return False

    def is_valid_turn(self, cell):
        if self.state[cell] == 0:
            return True
        else:
            return False

    def check_win(self, player):
        s = player.symbol
        if self.state[0] == s and self.state[1] == s and self.state[2] == s:
            return True
        elif self.state[3] == s and self.state[4] == s and self.state[5] == s:
            return True
        elif self.state[6] == s and self.state[7] == s and self.state[8] == s:
            return True

        elif self.state[0] == s and self.state[3] == s and self.state[6] == s:
            return True
        elif self.state[1] == s and self.state[4] == s and self.state[7] == s:
            return True
        elif self.state[2] == s and self.state[5] == s and self.state[8] == s:
            return True

        elif self.state[0] == s and self.state[4] == s and self.state[8] == s:
            return True
        elif self.state[2] == s and self.state[4] == s and self.state[6] == s:
            return True

    def is_full(self):
        for i in self.state:
            if i == 0:
                return False
        return True

    def sign_to_printable(self, sign):
        if sign == 0:
            return " "
        elif sign == 1:
            return "X"
        else:
            return "O"

    def print_board(self):
        print(" " + self.sign_to_printable(self.state[0]) + " | " + self.sign_to_printable(self.state[1]) + " | " + self.sign_to_printable(self.state[2]) + " \n" +
              " " + self.sign_to_printable(self.state[3]) + " | " + self.sign_to_printable(self.state[4]) + " | " + self.sign_to_printable(self.state[5]) + " \n" +
              " " + self.sign_to_printable(self.state[6]) + " | " + self.sign_to_printable(self.state[7]) + " | " + self.sign_to_printable(self.state[8]) + " \n")


class Player:
    def __init__(self, symbol):
        self.symbol = symbol


if __name__ == '__main__':
    player_a = Player(1)
    player_b = Player(-1)
    board = Board()
    active_player = player_a
    while not board.is_full():
        board.print_board()
        try:
            cell = int(input("Where do you want to place your sign? [1-9]"))
        except ValueError:
            continue
        cell = cell - 1
        if cell < 0 or cell > 8:
            print("Please enter a number between 1 and 9")
            continue
        if not board.make_turn(cell, active_player):
            print("Invalid Move")
            continue

        if board.check_win(active_player):
            print("You wonnered! GW.")
            break

        if …
IT, programmieren, Informatik, Programmiersprache, Python, Instanz, Python 3, Objektorientierte Programmierung
Excel | Diabook - "DiaSearch"?

Guten Morgen zusammen.

Ich bin Robin, 24 Jahre alt und habe Diabetes Typ 1.

Seit einiger Zeit habe ich ein Projekt in mein Leben gerufen das mir wirklich sehr am Herzen liegt und das ich mit vollster Leidenschaft betreibe. Dabei handelt es sich um mein Privates:

Diabetes - "Diabolic-Management System." welches ich selbstständig entwickle.

Dazu habe ich bereits schon mehrere Fragen im Bezug zu Excel gehabt weil ich vorher manche Dinge nicht wusste. Und ich habe auch schon einiges hinbekommen. Allerdings möchte ich das alles nochmal "frisch" überarbeiten.

Ich möchte hier auch nichts Verkaufen oder sowas. Ich benötige lediglich weitere Hilfe bei etwas. Mehr nicht.

Und zwar hatte ich viele einzelne Dinge gebaut die ich nun in einem Dokument an einem einzigen Zentralen Ort haben möchte. Und darum geht's:

Nährwertrechner, Insulinrechner, Tagebuch usw. waren bisher alle Eigene Teile. Diese möchte ich nun alle zu einem zusammenführen. Nun möchte ich das alles in einem Dokument Namens "Diabook" aufbauen.

Sooo und vorher kam mir ein wunderbarer und sehr Ausschlaggebender Gedanke: "DiaSearch" die Suchmaschine die wie so eine Art Google sein soll nur im Bezug auf Lebensmittel und der Lebensmitteldatenbank die ich sowieso baue. Diese nutzt man dann Generell im Tagebuch als Dropdown Menü für die Eintragung von Mahlzeiten oder Lebensmitteln die man isst aber das ist ein anderes Thema.

Meine Idee war es "DiaSearch" einzubauen um jederzeit abhängig von Mahlzeiten schauen zu können wie viel ein Apfel oder sowas an Kohlenhydrate hat. Somit muss man nicht ständig im Tagebuch zurückgreifen um dort nachzuschauen sondern kann wie Google einfach allesmögliche Suchen. Geplant ist auch mit Filter.

Ich habe da mal eine extra Skizze für euch gemacht damit ihr euch das etwas Vorstellen könnt. Und meine Skizze verrät auch so ein wenig worauf ich hinaus will:

Ich möchte das man in der Suchleiste alle möglichen Daten eingeben kann. Namen, ID Nummern und wenn Möglich auch Hashtags um alles finden zu können. Die dazugehörigen Nährwerte sollen dann im "Daten-Dashboard" Detailliert Angezeigt werden. Das soll auch Synchron sein - Apfel, ID 01, usw. und dann dort im Dashboard die Nährwert Angaben zu dem Apfel mit allem und nicht irgendwas anderes. Also im Prinzip sollen die Ergebnisse zur Suche übereinstimmen. Egal ob ich Apfel oder #Apfel oder 01 in der Suchleiste eingebe.

Außerdem hätte ich auch gerne Kategorien und Mengen Auswahl dazu. So ein Dropdown wo man dann 1 Stück usw. auswählen kann um die Menge der Kohlenhydrate zu sehen.

Wäre sowas irgendwie machbar und wie? Ich fände das absolut MEGA!! :D

Vielen Dank im Voraus.

Mit besten Grüßen

Robin | TechBrain. :)

Bild zum Beitrag
PC, Computer, Gesundheit, Software, Windows, Microsoft, Office, Microsoft Excel, Programm, IT, programmieren, Diabetes, Formel
Mit testdisk Partitionen/Einhängepunkte restaurieren?

Das Problem entstand dadurch, dass ich einen USB-Stick erstellen wollte, der das alte BIOS updaten sollte. Und irgendwie habe ich ihn auf der internen Festplatte kreiert. Welch ein Unglück!!!!! Darum besteht diese Festplatte jetzt aus der 34 MB-Partition "CHIEF_ENG" und aus 240 GB "free space". Wie mir das Programm "disks" verrät.

"Size in sectors" entspricht der doppelten Grösse der ehemaligen Partitionen. Also:

  1. Das ist die Partition des fälschlicherweise aus der Festplatte gemachten USB-Stick für das BIOS-Update.
  2. Dies muss die Windowspartition sein. Sie hatte gut 30 GB.
  3. Ich denke, diese ist auch ein Teil von Windows. Jedenfalls dürfte sie von Anfang an bestanden haben. "EFI" bedeutet, es ist die Partition, von welcher der Computer gestartet werden muss?
  4. Das kann nur die Linux-Partition sein. Sie hatte gut 200GB.
  5. Das ist vermutlich so eine Recovery-Partition von Windows.

Soll ich nun einfach Folgendes auswählen?

Oder diese zweite EFI-Partition zu Primary machen??? Oder etwas ganz Anderes???Kann ich den Daten verlieren, wenn ich hier was Falsches einstelle?

Eigentlich dürfte es ja kein Hexenwerk sein. Wenn ich gerade 200 GB auf einer externen Platte frei hätte, würde ich natürlich sofort ein Backup machen! Aber es sollte doch auch so einen recht sicheren und zuverlässigen Weg geben, die Partitionen bzw. Einhängepunkte wie früher zu hinzubekommen. Oder liege ich da denn falsch?

Allerherzlichsten Dank!!!
(Linux Mint 21.1, Lenovo Think Pad T410)

Bild zum Beitrag
PC, Computer, Software, Betriebssystem, Linux, Programm, IT, Programmierer, programmieren, Hilfestellung, USB-Stick, Recovery, reparieren, BIOS, booten, Linux Mint, PC-Problem, thinkpad, Partition, testdisk
Python Referenzen und Objektkopien?

ChatGPT und mein Pythonbuch sagen folgendes:
„In Python werden Objekte durch Referenzen verwaltet, die auf den Speicherbereich zeigen, in dem das Objekt gespeichert ist. Wenn ein Objekt über eine Referenz zugewiesen wird, wird der Speicherplatz für das Objekt reserviert und die Referenz zeigt auf diesen Speicherbereich. Wenn auf denselben Wert bereits von einer anderen Referenz verwiesen wird, zeigt diese Referenz auf dasselbe Objekt/Speicherbereich.“

Aber danach steht in meinem Pythonbuch der Code am Ende dieser Nachricht.
Und über dem Code stand, dass mit diesem y.append(i) eine echte Kopie von x erstellen kann. Aber da ja schon x auf die Liste verweist hätte man nach dem .append() ja zwei Referenzen. Nämlich x und y. Also müsste Python laut der ersten Aussage doch mit beiden Referenzen auf ein und dasselbe Objekt verweisen. Dann wäre es aber keine Kopie mehr, sondern das gleiche Objekt.

Ich hoffe, dass ich mein Problem irgendwie erklären konnte.
LG Code Snake 🙂

import copy

x = [23, "hallo", -7.5]
y = []

for i in x:
    y.append(i)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
print()

x = (23, ["Berlin", "Hamburg"], -7.5, 12.67)
y = copy.deepcopy(x)

print("dasselbe Objekt:", x is y)
print("gleicher Inhalt:", x == y)
IT, programmieren, Informatik, Programmiersprache, Python, Referenz, Python 3, Objektorientierte Programmierung
Wie funktioniert der Aufbau einer Vermittlungsplattform?

Liebe Community

aktuell diskutieren Kollegen aus der Erwachsenenbildung den Aufbau einer Vermittlungsplattform für Sprachtraining ....

Fragen tun sich einige auf, für die ich um eure Meinung, eure Tipps und Feedback bitte.

*) Mit welchem Tool könnten Sprachtrainer ihre Verfügbarkeit einplanen bzw publizieren - etwa per Google Kalender? Oder was wäre sonst geeignet?

*) Sympathisch klang der Vorschlag von Kollegen, eine Wahlmöglichkeit zwischen online/physisch/abwechselnd treffen zwischen Tutor und Kunden zu erlauben...wie könnte man das technisch umsetzen, dass ein Kunde sieht, wann ein SprachTrainer physisch verfügbar ist und wann online und wann beides möglich ist?

*) Angedacht wurde, dass freelancer ihre Daten wie Ausbildung und Erfahrung mit Online Unterricht bzw Zertifizierung etc eingeben... Oder könnte man könnte auch das LinkedIn/ XING Profil verlinken bzw importieren lassen? Falls ja, könnte man es danach anonymisieren?

*) Verwendet werden sollte auch eine (möglichst günstige oder gratis) Video Konferenz Software wie Hangout Duo Google Chat 

... Was haltet ihr davon? ...und inwiefern würde die dsgvo die Nutzung einer amerikanischen Software gestatten?

*) diskutiert wurde die Publikation von Inseraten für Sprachtrainer Übersetzer Dolmetscher Lektoren Kultur-Trainern etc ...

.....Sollte/könnte man von Anfang an mehrere Berufskategorien von Freelancern (Sprachtrainer Übersetzer Dolmetscher), mehrere Sprachen, Fachsprachen (business English, Rechtsfranzösisch etc) und Niveaustufen anlegen in der Datenbank?

....Wenn ja: sollte/könnte man die alle parallel befüllen?

...wenn ja: sollte man die Tabellen für freelancer verschiedener Kategorien bzw verschiedene Fachsprachen gemeinsam sichtbar schalten oder erst ab einer gewissen Anzahl von Freelancern? Bzw schrittweise erst Deutsch Trainer (mit verschiedenen Levels und Fachsprachen), dann Englisch Französisch Trainer...etc freischalten?

... Ist das möglich, einzelne Tabellen nach einander sichtbar zu machen?

---

*) Angedacht wurde auch, einen Webshop mit Unterrichtsmaterialien bzw Lernmaterialien - dazu zu integrieren .

..wie schwierig wäre das, nicht nur einen webshop zu errichten, sondern an die Vermittlungsplattform so anzubinden, dass jedem, der einen Kurs bucht, auch der Einkauf von (passenden) Lernunterlagen im Webshop ermöglicht wird?

...und wie wäre es möglich, einen webshop so zu gestalten, dass nicht nur die Begründer/Betreiber des webshops, sondern auch externe Anbieter (von Lernunterlagen, Lehrvideos, Online Kursen, etc wie Verlage) ihre Angebote einstellen können (gegen provision/Gebühr für die Plattform Betreiber aka webshop Betreiber)? (Wie bei Amazon bzw Beeanco etc?)

... Wie ginge das technisch / organisatorisch/rechtlich am besten?

...

Gründung, E-Commerce, Online-Shop, Webseite, programmieren, Datenbank, Datenbanksystem, eCommerce website
Fehler bei WooCoomerce Prices by User Rolls Plugin. Wie löse ich ihn?

Hallo, ich bekomme bei vielen einfachen Tätigkeiten bei Wordpress diese Fehlermeldung:

Fatal error: Uncaught Exception: WooCommerce Cart instance not defined in /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/common/festi/woocommerce/WooCommerceCartFacade.php:78 Stack trace: #0 /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/common/festi/woocommerce/WooCommerceCartFacade.php(24): WooCommerceCartFacade->getCartInstance() #1 /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/common/festi/woocommerce/WooCommerceCartFacade.php(16): WooCommerceCartFacade->__construct() #2 /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/WooUserRolePricesFrontendFestiPlugin.php(1357): WooCommerceCartFacade::getInstance() #3 /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/WooUserRolePricesFrontendFestiPlugin.php(86): WooUserRolePricesFrontendFestiPlugin->_setCartItemsCount() #4 /home/customer/www/ka in /home/customer/www/kautabak24.de/public_html/wp-content/plugins/woocommerce-prices-by-user-role/common/festi/woocommerce/WooCommerceCartFacade.php on line 78

Es gab einen kritischen Fehler auf deiner Website. Bitte überprüfe den Posteingang deiner Website-Administrator-E-Mail-Adresse für weitere Anweisungen.

Die Email dazu bringt mich auch nicht weiter. Hier ein paar Systems Infos:
WordPress-Version 6.2

Aktives Theme: Savoy (Version 2.8.0)

Aktuelles Plugin: WooCommerce Prices By User Role (Version 5.0.2)

PHP-Version 7.4.33
Vielen dank für die Antworten!

Online-Shop, HTML, Webseite, programmieren, WordPress, Code, PHP, Webentwicklung, Fehlermeldung, Wordpress Plugin, Woocommerce

Meistgelesene Beiträge zum Thema Programmieren