Menu
CoddyTech

Menggunakan **kwarg

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 43 dari 64.

**kwargs adalah singkatan dari "argumen kata kunci". Ini memungkinkan sebuah fungsi menerima argumen bernama dalam jumlah berapa pun, seperti pasangan key=value, tanpa harus mendefinisikan semuanya terlebih dahulu.

Cara kerjanya:

  • *args → mengumpulkan argumen posisi tambahan ke dalam tuple
  • **kwargs → mengumpulkan argumen kata kunci tambahan ke dalam dictionary

Contoh Sederhana

Mari kita mulai dengan contoh sesederhana mungkin:

def greet(**kwargs):
    print(kwargs)

greet(name="Alice", age=25, country="Australia")

Output:

{'name': 'Alice', 'age': 25, 'country': 'Australia'}

Seperti yang kamu lihat, **kwargs secara otomatis mengumpulkan semua argumen kata kunci ke dalam dictionary.

Menggunakan dictionary

Karena kwargs sudah berupa dictionary, kamu bisa melakukan perulangan langsung pada dictionary tersebut:

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")

Output:

Information received:
name: Bob
age: 30
job: Teacher

Menggabungkan Parameter Biasa dengan **kwargs

Kamu bisa menggabungkan parameter biasa dengan **kwargs:

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: Reading

**kwargs Kosong

Jika tidak ada argumen kata kunci yang diberikan, kwargs akan menjadi dictionary kosong:

def show_data(**kwargs):
    if kwargs:
        print("Data:", kwargs)
    else:
        print("No data provided")

show_data()  # Tanpa argumen
show_data(item="apple")  # Dengan argumen

Output:

No data provided
Data: {'item': 'apple'}

Contoh di Dunia Nyata: Class dengan **kwargs

Berikut cara menggunakan **kwargs di dalam class:

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()

Output:

Name: Alice
age: 25
city: New York
job: Engineer

Membongkar dictionary

Kamu juga bisa membongkar dictionary saat memanggil fungsi:

def display_settings(**kwargs):
    for setting, value in kwargs.items():
        print(f"{setting} = {value}")

settings = {"debug": True, "verbose": False, "timeout": 30}
display_settings(**settings)  # Membongkar dictionary

Output:

debug = True
verbose = False
timeout = 30

Poin Penting:

  • **kwargs mengumpulkan argumen kata kunci ke dalam dictionary: tidak perlu konversi, karena sudah berupa dictionary
  • Nama kwargs sudah lazim digunakan. Kamu bisa menggunakan nama apa pun setelah **
  • Gunakan ini saat kamu menginginkan signature fungsi yang fleksibel
  • Cocok untuk menangani parameter opsional atau pengaturan konfigurasi
challenge icon

Tantangan

Mudah

Dalam tantangan ini, kamu akan mengimplementasikan sistem pembuatan orang dengan cakupan pengujian yang menyeluruh.

Kamu hanya perlu mengedit file person_creator.py, dengan mengikuti komentar TODO yang memandu implementasimu. File tersebut berisi struktur class untuk membuat dan mengelola object orang dengan berbagai property.

Coba sendiri

from person_creator import create_person

# Penangan kasus uji menyeluruh
test_case = input()

if test_case == "basic_test":
    create_person(name="John", age=25, occupation="Engineer")
    # output:
    # Person created with properties:
    # name: John
    # age: 25
    # occupation: Engineer

elif test_case == "empty_test":
    create_person()
    # output:
    # Person created with properties:
    # (tidak ada output tambahan karena tidak ada property)

elif test_case == "many_properties":
    create_person(name="Alice", age=30, occupation="Doctor", city="New York", 
                 country="USA", hobby="Reading", email="alice@example.com")
    # output:
    # 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")
    # output:
    # 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)
    # output:
    # 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)
    # output:
    # 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"})
    # output:
    # 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")
    # output:
    # Person created with properties:
    # name: José
    # city: São Paulo
    # country: Brasil
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Python online