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
Hintergrund in Java GUI?

Heyho,

Ich möchte gerne in meiner GUI einen Hintergrund einfügen, da es sonst so trostlos wirkt. Es soll das Bild "GameBackground.jpg" genutzt werden.

Hier ist der Code:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*; 
import ch.aplu.turtle.*;

/**
 *
 * Ein Spiel mit GUI
 *
 * @version 1.0 vom 19.05.2023
 * @abraham_oez 
 */

public class frame extends JFrame {
  private Button bSpielstarten1 = new Button();
  // Anfang Attribute
  private Button bHowtoplay1 = new Button();
  private Button bCopyright1 = new Button();
    private JMenu jMenuBar1_File = new JMenu("Spiel");
      private JMenu jMenuBar1_File_New = new JMenu("Neues Spiel");
  
  private JLabel Label1 = new JLabel();
  // Ende Attribute
  public frame() { 
    // Frame init
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 746; 
    int frameHeight = 562;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("Games by Abie D. Tate");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    setUndecorated(false);
    cp.setBackground(new Color(0xC0C0C0));
    // Anfang Komponenten
    
    bSpielstarten1.setBounds(288, 104, 176, 48);
    bSpielstarten1.setLabel("Spiel starten");
    bSpielstarten1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bSpielstarten1_ActionPerformed(evt);
      }
    });
    cp.add(bSpielstarten1);
    bHowtoplay1.setBounds(285, 224, 176, 48);
    bHowtoplay1.setLabel("How to play");
    bHowtoplay1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bHowtoplay1_ActionPerformed(evt);
      }
    });
    cp.add(bHowtoplay1);
    bCopyright1.setBounds(288, 352, 176, 48);
    bCopyright1.setLabel("Lizenzen");
    bCopyright1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bCopyright1_ActionPerformed(evt);
      }
    });
    cp.add(bCopyright1);

    // Ende Komponenten
    setVisible(true);
  }  
  
  
  
  public static void main(String[] args) {
    new frame();
  }  
  
  // Anfang Methoden
  public void bSpielstarten1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    
  } 

  public void bHowtoplay1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
    
  }  
  
  //Nachdem der Button 'Copyright' gedrueckt wurde, wird die Klasse 'CopyrightFrame' geoeffnet in einem neuen Fenster
  public void bCopyright1_ActionPerformed(ActionEvent evt) {
    
    if (evt.getSource() == bCopyright1) {
      CopyrightFrame copyrightFrame = new CopyrightFrame();
    } 
    
  }  

} 

Java, Programmiersprache, Swing, Java Swing
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
HTML Kalender ohne JavaScript oder PHP erstellen?

Hallo zusammen,

ich möchte mit HTML einen Kalender erstellen, der allerdings nicht statisch sein soll. Damit meine ich nicht unbedingt, dass jeder manuell auf der Webseite Daten eintragen kann, sondern dass man zwischen den Monaten navigieren kann. Zum Beispiel innerhalb einer Zeitspanne von August 2022 bis August 2025 oder so. Dabei soll der Kalender beim Aufrufen der Seite, wenn möglich, den aktuellen Monat zeigen und durch Klicken auf ein Symbol (oder eventuell Drücken der Links- / Rechtstaste auf der Tastatur) kann man auf den vorherigen oder nächsten Monat wechseln.

Ich möchte das - verständlicherweise - nicht durch das Erstellen von 37 verschiedenen HTML-Dokumenten erreichen, durch die man dann mit Hyperlinks zwischen diesen Seiten hin und herwechseln kann.

Das Problem ist, dass ich sowohl von JavaScript als auch von PHP absolut keine Ahnung habe und auf keinen Fall irgendwo im Internet einen fünfzig-Zeilen-Code (JavaScript, PHP oder sonst irgendeine Programmiersprache) kopieren will, den ich zu 99,9% selbst nicht verstehen würde.

Weiß einer, wie ich so etwas nur mit HTML und CSS (und eventuell, wenn es sein muss, auch mit Java) hinbekomme?

P. S. Bitte gebt mir keine Antworten vom Stil "lerne einfach JavaScript". Das ist keine hilfreiche Antwort, da ich es eben ohne JavaScript erreichen will!

Computer, Technik, HTML, IT, Webseite, Kalender, CSS, JavaScript, Informatik, interaktiv, PHP, Programmiersprache, Softwareentwicklung, Technologie, Webdesign
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
Python Fehler no attribute 'TFE_NewContextOptions'?

Hi, Ich habe einen Fehler beim ausführen von einem Python Script:

C:\Users\DeneX\Desktop\SC_FEGAN\SC-FEGAN-program-files>python demo.py

Traceback (most recent call last):

 File "C:\Users\DeneX\Desktop\SC_FEGAN\SC-FEGAN-program-files\demo.py", line 11, in <module>

   from model import Model

 File "C:\Users\DeneX\Desktop\SC_FEGAN\SC-FEGAN-program-files\model.py", line 1, in <module>

   import tensorflow as tf

 File "C:\Users\DeneX\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\tensorflow\__init__.py", line 24, in <module>

   from tensorflow.python import pywrap_tensorflow # pylint: disable=unused-import

   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 File "C:\Users\DeneX\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\tensorflow\python\__init__.py", line 49, in <module>

   from tensorflow.python import pywrap_tensorflow

 File "C:\Users\DeneX\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\tensorflow\python\pywrap_tensorflow.py", line 58, in <module>

   from tensorflow.python.pywrap_tensorflow_internal import *

 File "C:\Users\DeneX\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\tensorflow\python\pywrap_tensorflow_internal.py", line 96, in <module>

   TFE_NewContextOptions = _pywrap_tensorflow_internal.TFE_NewContextOptions

                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

AttributeError: module '_pywrap_tensorflow_internal' has no attribute 'TFE_NewContextOptions'

Wie bekomme ich das behoben; Ich habe tensorflow==1.13.0rc2 installiert damit das Script läuft & Python 3.11.3

Linux, Programmiersprache, Python, Python 3, Pygame, Tkinter, Pycharm, Discord, Discord Bot
Mail via PHP Mailer versenden?

Moin,

ich wollte gerne eine mail über web.de versenden und bekomme nun folgende Fehlermeldung und finde keine Lösung :

2023-05-08 19:51:49 SERVER -> CLIENT: 220 web.de (mrweb006) Nemesis ESMTP Service ready

2023-05-08 19:51:49 CLIENT -> SERVER: EHLO localhost

2023-05-08 19:51:50 SERVER -> CLIENT: 250-web.de Hello localhost [178.24.229.10]250-8BITMIME250-SIZE 141557760250 STARTTLS

2023-05-08 19:51:50 CLIENT -> SERVER: STARTTLS

2023-05-08 19:51:50 SERVER -> CLIENT: 220 OK

2023-05-08 19:51:50 CLIENT -> SERVER: EHLO localhost

2023-05-08 19:51:50 SERVER -> CLIENT: 250-web.de Hello localhost [178.24.229.10]250-8BITMIME250-AUTH LOGIN PLAIN250 SIZE 141557760

2023-05-08 19:51:50 CLIENT -> SERVER: AUTH LOGIN

2023-05-08 19:51:50 SERVER -> CLIENT: 334 VXNlcm5hbWU6

2023-05-08 19:51:50 CLIENT -> SERVER: [credentials hidden]

2023-05-08 19:51:50 SERVER -> CLIENT: 334 UGFzc3dvcmQ6

2023-05-08 19:51:50 CLIENT -> SERVER: [credentials hidden]

2023-05-08 19:51:50 SERVER -> CLIENT: 535 Authentication credentials invalid

2023-05-08 19:51:50 SMTP ERROR: Password command failed: 535 Authentication credentials invalid

SMTP Error: Could not authenticate.

2023-05-08 19:51:50 CLIENT -> SERVER: QUIT

2023-05-08 19:51:50 SERVER -> CLIENT: 221 web.de Service closing transmission channel

SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

E-Mail konnte nicht gesendet werden. Fehler: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Hat jemand eine Idee was ich machen kann? Die LoginDaten meiner Email sind korrekt, die email selber,sowie die Pfade der PHP Dateien sind auch alle korrekt.

Webseite, PHP, Programmiersprache
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 kann ich glfw C++ richtig installieren?

Hallo Leute,

ich programmiere schon eine Weile in C++ aber bisher immer mit Clion weil ich mit Visual Studio einfach nicht zurecht komme. Immer wieder wurde ich von irgendwelchen Fehlermeldungen geplagt und fand wochenlang keine Lösung, bis ich es dann irgendwann aufgab.

Umsteigen wollte ich eigentlich nur, um Third-Party Libraries wie glfw nutzen zu können, aktuell benutze ich nur mingw und kompiliere mit g++.exe ohne irgendwelche drittanbieter-Bibliotheken, weil ich es nie richtig hinbekomme, sie einzubinden.

Selbst wenn ich wie vorgegeben vorging, kam es zu unermütlichen Fehlermeldungen. Deshalb habe ich bis jetzt immer nur auf header onlys zurückgegriffen, merke aber gerade, dass ich ohne glfw nicht weiter komme.

Am liebsten würde ich verstehen, wie ich die Bibliothek richtig einbinde, sodass ich weiterhin mit g++ selbst kompiliere. Ich habe dann schon alle möglichen include Dateien in mingw geworfen und so weiter, aber jedes Mal erfolglos. Als ich das mal in Visual Studio probiert habe, kam es schon beim Startelement zu Problemen weil ich immer irgend einen Fehler mit dem Kompilieren und Ausführen mit Visual habe. Auch Bibliotheken ließen sich nicht ohne Fehlermeldungen installieren.

Ich muss aber jetzt in die gui programmierung einsteigen und habe glfw vorgegeben. Ich muss aber zugeben, dass ich wohl bei der Installation von solchen Bibliotheken ein absoluter Laie bin..

Kann mir jemand helfen, das zum Laufen zu bringen?

Stellt mir doch bitte gerne gezielte Rückfragen, was ihr genau noch wissen wollt, um meine Probleme zu verstehen.

Vielen Dank im Voraus!

Lukas Zander

IT, Cplusplus, CPP, Informatik, Programmiersprache
Division in Assembly. Zeichen sind in ASCII gespeichert?
section .text
global main

main:
  mov esi, 10           ; ESI holds current number
  mov eax, 0           ; EAX holds sum of numbers
  push 10             ; Line feed for end of line (Stack is first in, last out -> Line feed will be last char)
  mov edi, 10           ; Divisor of 10 for seperating digits of number (used in divisionLoop)



; Sum numbers 1 through 10
sumLoop:
  add eax, esi          ; Add number to sum
  dec esi             ; Next number
  jnz sumLoop           ; Loop until 0



; Seperate eax into its digits, by dividing by 10 multiple times,
; where in each division the remainder will be a single digit 
; and the quotient will be the remaining digits used as dividend in next loop run
divisionLoop:
  mov edx, 0           ; Make sure edx is empty, as it is used as upper half of dividend
  div edi             ; Divide eax by edi (= 10) => quotient is in eax (= Rest of digits for next loop), remainder in edx (= Single digit)
  add edx, 48           ; Make edx (digit) a char representing its value by adding '0' to it
  push edx            ; Push char to stack for usage in print later

  cmp eax, 0           ; Loop until quotient is 0 (=> no more digits left)
  jne divisionLoop



; Print digits from Stack one by one
printLoop:
  mov eax, 4
  mov ebx, 1
  mov ecx, esp          ; Print top of stack (esp always points to top of stack)
  mov edx, 1           ; Length of 1 byte (= 1 char)
  int 80h

  pop esi             ; Remove top of stack
  cmp esi, 10           ; Loop until Line feed is reached
  jne printLoop


exit:
  mov eax, 1
  mov ebx, 0           ; Exit code 0
  int 80h

Hallo,

hier steht ein Programm in Assembler, dass die Zahlen von 1 bis 10 addiert.

Die 55 durch 10 teilt und die Reste der Division dann in einem Stack speichert.

push....

Am Ende wird alles über den Standardkanal ausgegeben auf der Konsole.

Wenn ich 55 / 10 teile ergibt das Quotient 5 steht in Register eax und der Rest hier auch 5 in edx Register. Bevor ich jetzt den Rest auf den Stack lege wird die Zahl mit 48 addiert. ergbit 53 ist das char Zeichen 5 im ASCII Code.

Heißt das jetzt, dass die Ergebnisse bei einer ganzzahligen Division im Assembler-Code immer in ASCII-Zeichen gespeichert sind?

Computer, Mathematik, Java, Assembler, Informatik, Programmiersprache

Meistgelesene Beiträge zum Thema Programmiersprache