Das **kwarg
Teil des Abschnitts Objektorientierte Programmierung der Python-Journey von Coddy. Lektion 43 von 64.
**kwargs ist die Kurzform von „keyword arguments“. Damit kann eine Funktion eine beliebige Anzahl benannter Argumente (wie Schlüssel-Wert-Paare) akzeptieren, ohne sie alle im Voraus definieren zu müssen.
So funktioniert es:
*args→ sammelt zusätzliche Positionsargumente in einem Tupel**kwargs→ sammelt zusätzliche Schlüsselwortargumente in einem Wörterbuch
Einfaches Beispiel
Beginnen wir mit dem einfachsten möglichen Beispiel:
def greet(**kwargs):
print(kwargs)
greet(name="Alice", age=25, country="Australia")Ausgabe:
{'name': 'Alice', 'age': 25, 'country': 'Australia'}Wie du sehen kannst, sammelt **kwargs automatisch alle Schlüsselwortargumente in einem Wörterbuch.
Verwenden des Wörterbuchs
Da kwargs bereits ein Wörterbuch ist, kannst du direkt darüber iterieren:
def print_info(**kwargs):
print("Information received:")
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Bob", age=30, job="Teacher")Ausgabe:
Information received:
name: Bob
age: 30
job: TeacherReguläre Parameter mit **kwargs kombinieren
Du kannst reguläre Parameter mit **kwargs kombinieren:
def create_profile(name, **details):
print(f"Creating profile for: {name}")
print("Additional details:")
for key, value in details.items():
print(f" {key}: {value}")
create_profile("Sarah", age=28, city="London", hobby="Reading")Output:
Creating profile for: Sarah
Additional details:
age: 28
city: London
hobby: ReadingLeeres **kwargs
Wenn keine Schlüsselwortargumente übergeben werden, ist kwargs ein leeres Wörterbuch:
def show_data(**kwargs):
if kwargs:
print("Data:", kwargs)
else:
print("No data provided")
show_data() # Keine Argumente
show_data(item="apple") # Mit ArgumentenOutput:
No data provided
Data: {'item': 'apple'}Praxisbeispiel: Klasse mit **kwargs
So könntest du **kwargs in einer Klasse verwenden:
class Person:
def __init__(self, name, **kwargs):
self.name = name
self.details = kwargs
def show_info(self):
print(f"Name: {self.name}")
for key, value in self.details.items():
print(f"{key}: {value}")
person = Person("Alice", age=25, city="New York", job="Engineer")
person.show_info()Ausgabe:
Name: Alice
age: 25
city: New York
job: EngineerWörterbücher entpacken
Du kannst Wörterbücher auch beim Aufrufen von Funktionen entpacken:
def display_settings(**kwargs):
for setting, value in kwargs.items():
print(f"{setting} = {value}")
settings = {"debug": True, "verbose": False, "timeout": 30}
display_settings(**settings) # Entpackt das DictionaryAusgabe:
debug = True
verbose = False
timeout = 30Wichtige Punkte:
**kwargssammelt Schlüsselwortargumente in einem dictionary: keine Konvertierung erforderlich, es ist bereits eines- Der Name
kwargsist konventionell – nach**könntest du jeden beliebigen Namen verwenden - Verwende es, wenn du flexible Funktionssignaturen möchtest
- Ideal für den Umgang mit optionalen Parametern oder Konfigurationseinstellungen
Aufgabe
EinfachIn dieser Herausforderung implementierst du ein System zur Erstellung von Personen mit umfassender Testabdeckung.
Du musst nur die Datei person_creator.py bearbeiten und dabei den TODO-Kommentaren folgen, die dich durch deine Implementierung führen. Die Datei enthält eine Klassenstruktur zum Erstellen und Verwalten von Personenobjekten mit verschiedenen Eigenschaften.
Probier es selbst
from person_creator import create_person
# Umfassender Testfall-Handler
test_case = input()
if test_case == "basic_test":
create_person(name="John", age=25, occupation="Engineer")
# Ausgabe:
# Person created with properties:
# name: John
# age: 25
# occupation: Engineer
elif test_case == "empty_test":
create_person()
# Ausgabe:
# Person created with properties:
# (keine zusätzliche Ausgabe, da es keine Eigenschaften gibt)
elif test_case == "many_properties":
create_person(name="Alice", age=30, occupation="Doctor", city="New York",
country="USA", hobby="Reading", email="alice@example.com")
# Ausgabe:
# Person created with properties:
# name: Alice
# age: 30
# occupation: Doctor
# city: New York
# country: USA
# hobby: Reading
# email: alice@example.com
elif test_case == "special_characters":
create_person(name="Bob", email="bob@example.com", phone="123-456-7890")
# Ausgabe:
# Person created with properties:
# name: Bob
# email: bob@example.com
# phone: 123-456-7890
elif test_case == "numeric_keys":
create_person(name="Charlie", age=35, height=175, weight=70)
# Ausgabe:
# Person created with properties:
# name: Charlie
# age: 35
# height: 175
# weight: 70
elif test_case == "boolean_values":
create_person(name="David", is_student=True, is_employed=False)
# Ausgabe:
# Person created with properties:
# name: David
# is_student: True
# is_employed: False
elif test_case == "nested_structures":
create_person(name="Eve", hobbies=["Reading", "Swimming", "Coding"],
address={"city": "Boston", "state": "MA", "zip": "02108"})
# Ausgabe:
# Person created with properties:
# name: Eve
# hobbies: ['Reading', 'Swimming', 'Coding']
# address: {'city': 'Boston', 'state': 'MA', 'zip': '02108'}
elif test_case == "unicode_characters":
create_person(name="José", city="São Paulo", country="Brasil")
# Ausgabe:
# Person created with properties:
# name: José
# city: São Paulo
# country: Brasil
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDer self-ParameterMethodenAttributeKonstruktormethode (__init__)Zusammenfassung – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDie super()-FunktionMethodenüberschreibungMehrfachvererbungMethodenauflösungsreihenfolgeWiederholung – Mitarbeiterhierarchie7Spezielle Methoden
Einführung in magische MethodenOperatorüberladungMagische Methoden für ContainerRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungsservice2Dekoratoren
Einführung in DekoratorenProperty-DekoratorDekorator für statische MethodenDekorator für Klassenmethoden5Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypingAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungMixinsStatische Methoden und KlassenmethodenKlassen-DekoratorenKontextmanager3Klassenattribute
Instanz- vs. KlassenvariablenProperty-DecoratorsPrivate AttributeWiederholung – Bankkontoverwaltung6Kapselung
Öffentliche, geschützte, private MemberZugriffsmodifikatorenInformationsverbergungProperty-Decorators – FortgeschrittenWiederholung – System zur Verwaltung von Studentendaten12Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und BenutzerklassenAusleihsystemSuchfunktionAdministrationsoberflächeTests und IntegrationÜbe selbstständig: Online-Python-Compiler