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.
- Eine Klasse ist eine Blaupause, und ein Objekt ist etwas, das daraus erstellt wird.
__init__richtet jedes neue Objekt ein undselfverweist auf dieses Objekt.- Für die Klasse festgelegte Attribute werden gemeinsam genutzt. Auf
selffestgelegte Attribute gehören zu einem Objekt. - Verwenden Sie
@dataclassfü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
selfvergessen. Schreiben Sieself.balance, nichtbalance, 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
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.
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.
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 →DevOpsErklä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 →SoftwareentwicklungAPI-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 →TestautomatisierungSpott 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 →SoftwaretestsCode-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 & SQLDELETE 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 & SQLErklä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 →SoftwareentwicklungTypeScript-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 →SoftwareentwicklungPython *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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsDocker-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 →TestautomatisierungTDD 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 →SoftwaretestsBenutzerakzeptanztests (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 & SQLErklä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 & SQLSQL 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 →SoftwareentwicklungWas 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 →SoftwareentwicklungErklä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 →SoftwareentwicklungErklä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 IntelligenzWas 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 →DevOpsBlau-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 →TestautomatisierungFlaky-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 →SoftwaretestsLasttest 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 →SoftwaretestsTestfall 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 & SQLSQL-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 & SQLSQL 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 →SoftwareentwicklungTutorial 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 →SoftwareentwicklungUmgang 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 →SoftwareentwicklungPython-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 IntelligenzWas 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 →DevOpsLinux-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 →TestautomatisierungSelenium 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 →SoftwaretestsSchweregrad 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 & SQLTutorial 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 & SQLSQL-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 →SoftwareentwicklungGit 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 →SoftwareentwicklungPython 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 & SQLSQL 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 →