Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

  1. Startseite
  2. Blog
  3. Softwareentwicklung

Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit realen Beispielen

Lernen Sie objektorientiertes Python, indem Sie etwas Reales erstellen. Erstellen Sie Klassen, verstehen Sie self und __init__, teilen Sie Verhalten mit Vererbung, schützen Sie Daten mit Eigenschaften und erkennen Sie, wann eine Klasse das falsche Werkzeug ist.

10 Min. Lesezeit
Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Das Wichtigste

  • Eine Klasse ist eine Blaupause, und ein Objekt ist etwas, das daraus erstellt wird.
  • __init__ richtet jedes neue Objekt ein und self verweist auf dieses Objekt.
  • Für die Klasse festgelegte Attribute werden gemeinsam genutzt. Auf self festgelegte Attribute gehören zu einem Objekt.
  • Verwenden Sie @dataclass für datenhaltende Klassen und bevorzugen Sie einfache Funktionen, wenn kein Status zum Beibehalten vorhanden ist.

Wenn ein Skript wächst, übergeben Sie am Ende dieselbe Gruppe von Variablen zwischen Funktionen, und es wird schwierig zu sagen, welche Daten zu welcher Logik gehören. Python-Klassen und -Objekte lösen dieses Problem, indem sie Daten und Verhalten in einer Einheit bündeln.

In diesem Tutorial erstellen wir Schritt für Schritt ein kleines Bankkonto und fügen jede OOP-Idee nur dann hinzu, wenn sie ein Problem löst. Wir haben jedes Beispiel auf Python 3.13 ausgeführt und die angezeigte Ausgabe stammt von diesem Lauf. Wenn Sie neu in der Sprache sind, lesen Sie zuerst unser Python-Tutorial für Anfänger.

Was sind Klassen und Objekte?

Eine Klasse beschreibt, was etwas ist und was es tun kann. Ein Objekt, auch Instanz genannt, ist ein bestimmtes Objekt, das aus dieser Beschreibung erstellt wurde. „Konto“ ist eine Klasse, während Ashas Konto und Bens Konto zwei Objekte sind.

Begriff Bedeutung Beispiel
Klasse Die Blaupause Konto
Objekt oder Instanz Ein Ding daraus gemacht a = Konto("Asha")
Attribut Daten zum Objekt a.balance
Methode Eine Funktion für die Klasse a.deposit(50)

Sie haben die ganze Zeit über Objekte verwendet. In Python sind Strings, Listen und sogar Funktionen Objekte, weshalb Sie "hello".upper() schreiben können.

Deine erste Klasse

class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance

    def deposit(self, amount):
        if amount <= 0:
            raise ValueError("amount must be positive")
        self.balance += amount
        return self.balance

a = Account("Asha", 100)
b = Account("Ben")

a.deposit(50)
print(a.balance, b.balance)

# 150 0

__init__ wird automatisch ausgeführt, wenn Sie ein Objekt erstellen, und legt den Startstatus fest. Die Einzahlung in a berührte b nicht, da jedes Objekt seine eigenen Daten hat. Beachten Sie, dass die Methode auch den Saldo vor einem schlechten Wert schützt. Unser Leitfaden zur Python-Ausnahmebehandlung erläutert raise ausführlicher.

Was ist Selbst?

self ist einfach das Objekt, an dem eine Methode arbeitet. Wenn Sie a.deposit(50) schreiben, ruft Python effektiv Account.deposit(a, 50) auf und übergibt das Objekt als erstes Argument. Auf diese Weise kann eine Methodendefinition jedes Objekt bedienen.

Der Name self ist eher eine starke Konvention als ein Schlüsselwort, aber verwenden Sie ihn immer. Das Vergessen in einer Methodendefinition ist der häufigste Anfängerfehler und führt zu einer verwirrenden Meldung über die Anzahl der Argumente.

Klassenattribute vs. Instanzattribute

Ein direkt im Klassenkörper festgelegtes Attribut wird von allen Objekten gemeinsam genutzt. Ein Satz auf self gehört nur zu diesem Objekt. Dieses Beispiel zeigt, wie sich Suchvorgänge verhalten:

class Account:
    interest_rate = 0.04    # class attribute

    def __init__(self, owner, balance=0):
        self.owner = owner  # instance attribute
        self.balance = balance

a = Account("Asha", 100)
b = Account("Ben")
print(a.interest_rate, b.interest_rate)   # 0.04 0.04

Account.interest_rate = 0.05
print(a.interest_rate, b.interest_rate)   # 0.05 0.05

a.interest_rate = 0.09
print(a.interest_rate, b.interest_rate, Account.interest_rate)
# 0.09 0.05 0.05

Diese letzte Zeile überrascht die Leute. Die Zuweisung über a hat den gemeinsamen Wert nicht geändert. Es wurde ein neues Instanzattribut auf a erstellt, das das Klassenattribut verbirgt. Python betrachtet zuerst das Objekt und dann die Klasse.

Spezielle (Dunder-)Methoden

Methoden mit doppelten Unterstrichen ermöglichen es Ihren Objekten, mit den integrierten Funktionen von Python zu arbeiten. Ohne sie zeigt das Drucken eines Kontos eine nutzlose Speicheradresse an. Das Hinzufügen von zwei ergibt eine lesbare Form:

    def __str__(self):
        return f"{self.owner}: {self.balance}"

    def __repr__(self):
        return f"Account({self.owner!r}, {self.balance})"

print(a)        # Asha: 150
print([a, b])   # [Account('Asha', 150), Account('Ben', 0)]
Methode Ausgelöst durch
__init__ Ein Objekt erstellen
__str__ print(obj), str(obj)
__repr__ Debuggen oder in einer Liste anzeigen
__eq__ a == b
__len__ len(obj)
__add__ a + b

Vererbung

Durch Vererbung kann eine neue Klasse eine vorhandene Klasse wiederverwenden und nur die Unterschiede ändern. Hier ist Savings ein Account mit einer zusätzlichen Einstellung:

class Savings(Account):
    def __init__(self, owner, balance=0, limit=3):
        super().__init__(owner, balance)
        self.limit = limit

    def __str__(self):
        return f"{super().__str__()} (savings)"

s = Savings("Chitra", 500)
s.deposit(100)
print(s, isinstance(s, Account), s.limit)

# Chitra: 600 (savings) True 3

super() ruft die Version des übergeordneten Elements auf, sodass die Setup-Logik nicht wiederholt wird. deposit wurde unverändert übernommen und __str__ wurde überschrieben, um eine Bezeichnung hinzuzufügen. Verwenden Sie die Vererbung nur für eine echte „ist ein“-Beziehung. Wenn eine Klasse lediglich etwas benötigt, beispielsweise ein Auto, das einen Motor benötigt, geben Sie ihr dieses Objekt als Attribut. Dies wird als Komposition bezeichnet und ist in der Regel flexibler als tiefe Vererbungsketten.

Polymorphismus

Polymorphismus bedeutet, dass verschiedene Objekte auf unterschiedliche Weise auf denselben Methodenaufruf reagieren können. Der Aufrufcode muss den genauen Typ nicht kennen:

class Square:
    def __init__(self, side):
        self.side = side
    def area(self):
        return self.side ** 2

class Circle:
    def __init__(self, radius):
        self.radius = radius
    def area(self):
        return round(3.14159 * self.radius ** 2, 2)

for shape in [Square(3), Circle(2)]:
    print(type(shape).__name__, shape.area())

# Square 9
# Circle 12.57

Diese beiden Klassen haben nicht einmal ein gemeinsames übergeordnetes Element. Python kümmert sich nur darum, dass das Objekt eine area-Methode hat, ein Ansatz, der als Duck-Typing bekannt ist. Das spätere Hinzufügen von Triangle würde keine Änderung der Schleife erfordern.

Kapselung und Eigenschaften

Python hat keine wirklich privaten Attribute und verlässt sich stattdessen auf Konventionen. Ein einzelner Unterstrich, wie in _price, sagt anderen Entwicklern: „Dies ist intern, bitte nicht berühren“. Um Werte zu überprüfen, wenn sie festgelegt sind, verwenden Sie eine Eigenschaft, die von außen wie ein einfaches Attribut aussieht:

class Product:
    def __init__(self, price):
        self.price = price

    @property
    def price(self):
        return self._price

    @price.setter
    def price(self, value):
        if value < 0:
            raise ValueError("price cannot be negative")
        self._price = value

p = Product(100)
p.price = 150
print(p.price)      # 150
p.price = -5        # ValueError: price cannot be negative

Das bedeutet, dass Sie mit einem einfachen Attribut beginnen und später eine Validierung hinzufügen können, ohne den Code zu ändern, der die Klasse verwendet. Schreiben Sie die Methoden get_price() und set_price() also nicht aus Gewohnheit, wie Sie es vielleicht in Java tun würden. Die @-Syntax hier ist ein Dekorator, den wir unter Python-Dekoratoren erklärt erläutern.

Klassenmethoden und statische Methoden

class Temperature:
    def __init__(self, celsius):
        self.celsius = celsius

    @classmethod
    def from_fahrenheit(cls, f):
        return cls(round((f - 32) * 5 / 9, 1))

    @staticmethod
    def is_freezing(celsius):
        return celsius <= 0

Temperature.from_fahrenheit(212).celsius   # 100.0
Temperature.is_freezing(-3)                # True
Typ Erstes Argument Benutze es für
Instanzmethode selbst Arbeiten mit den Daten eines Objekts
@classmethod cls Alternative Konstruktoren
@staticmethod Keine Helfer im Zusammenhang mit der Klasse

Datenklassen

Wenn eine Klasse hauptsächlich Daten enthält, ist das manuelle Schreiben von __init__, __repr__ und __eq__ mühsam. @dataclass generiert sie aus Typanmerkungen:

from dataclasses import dataclass, field

@dataclass
class Item:
    name: str
    price: int
    tags: list = field(default_factory=list)

print(Item("Pen", 10))
print(Item("Pen", 10) == Item("Pen", 10))

# Item(name='Pen', price=10, tags=[])
# True

Tipp: Nicht alles braucht einen Kurs. Wenn sie keinen Zustand und nur ein Verhalten hat, ist eine einfache Funktion einfacher. Für einfache Suchvorgänge kann ein Wörterbuch ausreichen. Greifen Sie zu einem Kurs, wenn Daten und die Regeln, die sie schützen, eindeutig zusammengehören.

Häufige Fehler

Verwendung eines veränderlichen Klassenattributs

Das ist ein klassischer Fehler. Die Liste ist für die Klasse definiert, sodass alle Warenkörbe sie gemeinsam nutzen:

class Cart:
    items = []            # shared by every cart!

    def add(self, item):
        self.items.append(item)

c1, c2 = Cart(), Cart()
c1.add("pen")
print(c2.items)

# ['pen']

Erstellen Sie es in __init__ mit self.items = [], sodass jedes Objekt eine eigene Liste erhält.

Andere häufige Fehler

  • self vergessen. Schreiben Sie self.balance, nicht balance, in Methoden.
  • Vergessen super().__init__(). Das Kind vermisst dann Attribute, die vom Elternteil eingerichtet wurden.
  • Große Klassen erstellen. Eine Klasse, die alles kann, ist schwer zu testen. Teilen Sie es nach Verantwortung auf.
  • Tiefe Vererbung. Zwei Ebenen reichen normalerweise aus und die Zusammensetzung ist oft klarer.
  • Keine Tests schreiben. Klassen mit Regeln sind einfach zu testen, wie unser Pytest-Tutorial mit einem kleinen Wagen zeigt.

Fazit

Beim objektorientierten Python geht es darum, Daten mit dem Verhalten zu gruppieren, das sie schützt. Beginnen Sie mit __init__, Methoden und __str__ und fügen Sie dann Vererbung und Eigenschaften hinzu, wenn Sie auf ein Problem stoßen, das sie lösen. Nehmen Sie als nächsten Schritt ein Skript, das überall die gleichen wenigen Variablen übergibt, und wandeln Sie sie in eine kleine Klasse um.

Häufige Fragen

Was ist der Unterschied zwischen einer Klasse und einem Objekt?

Eine Klasse ist die Definition oder Blaupause. Ein Objekt ist eine daraus erstellte spezifische Instanz mit eigenen Daten. Eine Klasse kann viele Objekte erstellen.

Was macht __init__ in Python?

Es handelt sich um den Initialisierer, der automatisch ausgeführt wird, wenn Sie ein Objekt erstellen. Normalerweise werden die Startattribute des Objekts anhand der von Ihnen übergebenen Argumente festgelegt.

Was ist self in Python?

self bezieht sich auf das Objekt, für das eine Methode aufgerufen wird. Python übergibt es automatisch und lässt die Methode die Attribute dieses Objekts lesen und ändern.

Was sind die vier Säulen von OOP?

Sie sind Kapselung, Abstraktion, Vererbung und Polymorphismus. Zusammen helfen sie Ihnen, Daten mit Verhalten zu bündeln, Details auszublenden und Code wiederzuverwenden.

Wann sollte ich eine Klasse anstelle einer Funktion verwenden?

Verwenden Sie eine Klasse, wenn Daten und Verhalten über mehrere Vorgänge hinweg zusammengehören. Für eine zustandslose Operation ist eine einfache Funktion einfacher und leichter zu testen.

Lerne weiter

Arbeiten Sie mit Stack Quora

Benötigen Sie Hilfe beim Testen, WordPress oder SEO?

Wir helfen Teams, bessere Software zu liefern und ihre Websites zu erweitern. Sagen Sie uns, woran Sie gerade arbeiten, und wir schlagen Ihnen einen klaren nächsten Schritt vor.

Lesen Sie weiter

Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung

Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.

Künstliche Intelligenz

KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert

KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…

Artikel lesen →
DevOps

Erklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht

Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…

Artikel lesen →
Softwareentwicklung

API-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern

API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…

Artikel lesen →
Testautomatisierung

Spott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen

Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …

Artikel lesen →
Softwaretests

Code-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet

Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…

Artikel lesen →
Datenbanken & SQL

DELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck

DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen

SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…

Artikel lesen →
Softwareentwicklung

TypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler

TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…

Artikel lesen →
Softwareentwicklung

Python *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen

Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…

Artikel lesen →
Softwareentwicklung

Python-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet

Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…

Artikel lesen →
Künstliche Intelligenz

Was sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können

Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…

Artikel lesen →
DevOps

Überwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces

Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…

Artikel lesen →
DevOps

Docker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten

Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…

Artikel lesen →
Testautomatisierung

TDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte

TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…

Artikel lesen →
Softwaretests

Benutzerakzeptanztests (UAT): Prozess, Checkliste und reale Beispiele

Benutzerakzeptanztests erklärt: Wer führt ihn durch, wie unterscheidet er sich von der Qualitätssicherung, ein siebenstufiger Prozess, eine UAT-Test…

Artikel lesen →
Datenbanken & SQL

Erklärte SQL-NULL-Werte: IS NULL, COALESCE, NULLIF und die zu vermeidenden Fallen

SQL-NULL-Werte, die mit von uns ausgeführten Abfragen erklärt wurden: dreiwertige Logik, IS NULL, COALESCE, NULLIF, wie Aggregate, Joins und Sortier…

Artikel lesen →
Datenbanken & SQL

SQL CASE WHEN-Anweisung: Syntax, reale Beispiele und häufige Fehler

SQL CASE WHEN anhand der von uns ausgeführten Abfragen erklärt: einfache und durchsuchte Formulare, Bedingungsreihenfolge, Pivots mit SUM, COUNT-Tri…

Artikel lesen →
Softwareentwicklung

Was ist JWT? JSON-Web-Tokens anhand eines funktionierenden Beispiels erklärt

Was ist JWT? JSON Web Tokens erklärt: die drei Teile, ein Token, das in dem von uns ausgeführten Code erstellt und manipuliert wurde, JWT vs. Sitzun…

Artikel lesen →
Softwareentwicklung

Erklärte JavaScript-Ereignisschleife: Aufrufstapel, Mikrotasks und Timer mit Beispielen

Die JavaScript-Ereignisschleife wurde mit dem von uns ausgeführten Code erklärt: Aufrufstapel, Aufgaben- und Mikrotask-Warteschlangen, warum setTime…

Artikel lesen →
Softwareentwicklung

Erklärung von Python-Generatoren und -Ertrag: Sparen Sie Speicher mit echten Beispielen

Python-Generatoren und Yield anhand des von uns ausgeführten Codes erklärt: wie sie angehalten und fortgesetzt werden, gemessene Speichereinsparunge…

Artikel lesen →
Künstliche Intelligenz

Was sind Einbettungen? Vektoren und Kosinusähnlichkeit einfach erklärt

Was sind Einbettungen? Ein Leitfaden in einfacher Sprache zu Vektoren, Kosinusähnlichkeit und semantischer Suche, mit einem kleinen Beispiel, das wi…

Artikel lesen →
DevOps

Blau-Grün vs. Canary-Bereitstellung: Unterschiede, Kompromisse und Auswahl

Blue-Green vs. Canary-Bereitstellung erklärt: Funktionsweise, Kosten, Risiko und Rollback, stabiles Benutzer-Bucketing, das wir getestet haben, Date…

Artikel lesen →
Testautomatisierung

Flaky-Tests: Was sie verursacht und wie man sie endgültig behebt

Flaky-Tests wurden anhand von Demos erklärt, die wir durchgeführt haben: die Hauptursachen, wie man sie bestätigt und diagnostiziert, richtige Korre…

Artikel lesen →
Softwaretests

Lasttest vs. Stresstest: Unterschiede, Metriken und k6-Beispiele

Erläuterungen zu Lasttests und Stresstests: Was die einzelnen Tests beweisen, Spike- und Soak-Tests, welche Kennzahlen wichtig sind, warum Durchschn…

Artikel lesen →
Softwaretests

Testfall vs. Testszenario: Hauptunterschiede, Beispiele und wann man sie jeweils verwendet

Testfall vs. Testszenario erklärt: klare Definitionen, eine Tabelle nebeneinander, eine Funktion zum Zurücksetzen von Passwörtern, die von Szenarios…

Artikel lesen →
Datenbanken & SQL

SQL-Abfrageoptimierung: Ausführungspläne lesen und langsame Abfragen mit Zeitvorgaben beheben

An einer Million Zeilen getestete SQL-Abfrageoptimierung: Ausführungspläne lesen, die richtigen Indizes hinzufügen, nicht sargierbare Filter korrigi…

Artikel lesen →
Datenbanken & SQL

SQL UNION vs. UNION ALL: Unterschiede, Beispiele und getestete Leistung

SQL UNION vs. UNION ALL anhand der von uns ausgeführten Abfragen erklärt: Duplikate, die Regeln, denen beide folgen, ein echter Datenfehler, gemesse…

Artikel lesen →
Softwareentwicklung

Tutorial zur JavaScript-Abruf-API: GET, POST, Fehlerbehandlung und Zeitüberschreitungen

Ein JavaScript-Abruf-API-Tutorial, das auf einem lokalen Server getestet wurde: GET und POST, warum 404 nicht ausgelöst wird, ein wiederverwendbarer…

Artikel lesen →
Softwareentwicklung

Umgang mit Python-Dateien: Lesen, Schreiben, CSV, JSON und Pathlib mit Beispielen

Die Handhabung von Python-Dateien wird anhand des von uns ausgeführten Codes erklärt: Öffnungsmodi, Lesen großer Dateien, CSV, JSON, Pathlib, Binärd…

Artikel lesen →
Softwareentwicklung

Python-Klassen und -Objekte: OOP-Tutorial mit echten Beispielen

Python-Klassen und -Objekte erklärt mit Code, den wir ausgeführt haben: __init__, Methoden, Klassen- und Instanzattribute, Vererbung, Eigenschaften,…

Artikel lesen →
Künstliche Intelligenz

Was ist ein großes Sprachmodell? Wie LLMs funktionieren, ohne großen Hype erklärt

Was ist ein großes Sprachmodell? LLMs im Klartext erklärt: Token, Einbettungen, Aufmerksamkeit, Training, Temperatur- und Kontextfenster, eine klein…

Artikel lesen →
DevOps

Linux-Befehle für Anfänger: Der grundlegende Terminal-Leitfaden mit Beispielen

Linux-Befehle für Anfänger, gruppiert nach Aufgaben: Navigation, Dateien, Anzeigen von Protokollen, Grep, Pipes, Berechtigungen, Prozesse und Archiv…

Artikel lesen →
Testautomatisierung

Selenium vs. Playwright: Hauptunterschiede, Code im Vergleich und welche Sie wählen sollten

Selenium vs. Playwright im Vergleich: Architektur, Wartezeit, Browser- und Sprachunterstützung, Debugging, der gleiche Test in beiden Tools, Migrati…

Artikel lesen →
Softwaretests

Äquivalenzpartitionierung: Testdesigntechnik anhand von Beispielen erklärt

Erklärung der Äquivalenzpartitionierung: Wie man gültige und ungültige Partitionen findet, Beispiele für Alter, Passwörter und Gutscheine, von uns d…

Artikel lesen →
Softwaretests

Schweregrad vs. Priorität beim Softwaretest: Unterschiede, Matrix und reale Beispiele

Schweregrad vs. Priorität beim Softwaretest erklärt: klare Definitionen, eine Vier-Wege-Matrix mit Beispielen, Stufenskalen, wer die einzelnen Punkt…

Artikel lesen →
Datenbanken & SQL

Tutorial zu SQL-Unterabfragen: Typen, korrelierte Unterabfragen und EXISTS mit Beispielen

Ein SQL-Unterabfrage-Tutorial mit Abfragen, die wir ausgeführt haben: Skalar-, IN-, FROM- und SELECT-Unterabfragen, korrelierte Unterabfragen, EXIST…

Artikel lesen →
Datenbanken & SQL

SQL-Transaktionen und ACID erklärt: COMMIT, ROLLBACK und Isolationsstufen

SQL-Transaktionen und ACID anhand einer von uns durchgeführten Banküberweisung erklärt: COMMIT, ROLLBACK, Sicherungspunkte, Sperren, Isolationsstufe…

Artikel lesen →
Softwareentwicklung

Git merge vs rebase: Unterschiede, Beispiele und wann man was nutzt

Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.

Artikel lesen →
Softwareentwicklung

Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…

Artikel lesen →
Datenbanken & SQL

SQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)

SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…

Artikel lesen →