Menggunakan *args
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Python di Coddy. Pelajaran 42 dari 64.
Parameter *args memungkinkan method menerima sejumlah argumen posisional. Tanda bintang mengumpulkan semua argumen posisional tambahan ke dalam tuple.
Berikut contoh method yang menggunakan *args:
class Calculator:
def add_numbers(self, *args):
return sum(args)
def show_numbers(self, *args):
for i, num in enumerate(args):
print(f"Number {i+1}: {num}")Panggil method dengan jumlah argumen yang berbeda:
calc = Calculator()
result1 = calc.add_numbers(1, 2, 3)
result2 = calc.add_numbers(10, 20, 30, 40, 50)
print(result1) # 6
print(result2) # 150*args mengumpulkan semua argumen ke dalam tuple:
calc.show_numbers(5, 10, 15, 20)Output:
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20Gabungkan parameter biasa dengan *args:
class Logger:
def log_message(self, level, *messages):
print(f"[{level}]", end=" ")
for message in messages:
print(message, end=" ")
print() # Baris baru
logger = Logger()
logger.log_message("INFO", "User", "logged", "in")
logger.log_message("ERROR", "Connection", "failed")Gunakan *args dalam method konstruktor:
class Team:
def __init__(self, team_name, *players):
self.team_name = team_name
self.players = list(players)
def show_team(self):
print(f"Team: {self.team_name}")
for player in self.players:
print(f"- {player}")
team = Team("Warriors", "Alice", "Bob", "Charlie", "Diana")
team.show_team()Output:
6
150
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20
[INFO] User logged in
[ERROR] Connection failed
Team: Warriors
- Alice
- Bob
- Charlie
- DianaKamu juga bisa membongkar argumen saat memanggil method:
numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers) # Membongkar isi list
print(result) # 15Poin Penting: *args mengumpulkan sejumlah argumen posisional ke dalam tuple. Gunakan ini saat kamu tidak tahu berapa banyak argumen yang akan diteruskan ke sebuah method. Nama args sudah umum digunakan. Kamu bisa menggunakan nama apa pun setelah tanda bintang, tetapi args adalah standar.
Tantangan
MudahDalam tantangan ini, kamu akan mengimplementasikan fungsi utilitas angka yang fleksibel.
Edit file number_utils.py untuk mengimplementasikan fungsi sum_all_numbers yang menerima sejumlah argumen numerik dan mengembalikan jumlahnya. Fungsi ini harus:
- Mengembalikan 0 jika tidak ada argumen yang diberikan
- Mencetak "Error: All arguments must be numbers" dan mengembalikan None jika ada argumen nonnumerik yang diberikan
- Boolean (
True/False) tidak dihitung sebagai angka di sini dan juga harus ditolak, meskipunbooladalah subclass dariint
File number_utils.py berisi komentar TODO terperinci untuk memandu implementasimu. Ikuti komentar ini dengan saksama agar solusimu memenuhi semua persyaratan.
Coba sendiri
from number_utils import sum_all_numbers
# Penangan kasus uji menyeluruh
test_case = input()
if test_case == "basic_test":
# Uji fungsi dasar dengan bilangan bulat positif
print(sum_all_numbers(1, 2, 3)) # Seharusnya mengembalikan 6
print(sum_all_numbers()) # Seharusnya mengembalikan 0
print(sum_all_numbers(10, 20, 30, 40)) # Seharusnya mengembalikan 100
print(sum_all_numbers(1, 2, "three")) # Seharusnya mencetak error dan mengembalikan None
elif test_case == "float_test":
# Uji dengan bilangan desimal
print(sum_all_numbers(1.1, 2.2, 3.3)) # Seharusnya mengembalikan 6.6
print(sum_all_numbers(5.5, 5.0)) # Seharusnya mengembalikan 10.5
elif test_case == "mixed_numbers_test":
# Uji dengan campuran bilangan bulat dan desimal
print(sum_all_numbers(5, 5.5)) # Seharusnya mengembalikan 10.5
print(sum_all_numbers(10, 20.5, 30, 40)) # Seharusnya mengembalikan 100.5
elif test_case == "zero_values_test":
# Uji dengan nilai nol
print(sum_all_numbers(0, 0, 0)) # Seharusnya mengembalikan 0
print(sum_all_numbers(0)) # Seharusnya mengembalikan 0
print(sum_all_numbers()) # Seharusnya mengembalikan 0
elif test_case == "negative_values_test":
# Uji dengan nilai negatif
print(sum_all_numbers(-1, -2, -3)) # Seharusnya mengembalikan -6
print(sum_all_numbers(-5, -5)) # Seharusnya mengembalikan -10
print(sum_all_numbers(-5, 5)) # Seharusnya mengembalikan 0
elif test_case == "large_values_test":
# Uji dengan nilai yang sangat besar
print(sum_all_numbers(1000000000, 1000000000)) # Seharusnya mengembalikan 2000000000
print(sum_all_numbers(1000000000, 2000000000.5)) # Seharusnya mengembalikan 3000000000.5
elif test_case == "single_value_test":
# Uji dengan satu nilai
print(sum_all_numbers(5)) # Seharusnya mengembalikan 5
print(sum_all_numbers(-10)) # Seharusnya mengembalikan -10
print(sum_all_numbers(3.5)) # Seharusnya mengembalikan 3.5
elif test_case == "error_handling_test":
# Uji dengan berbagai nilai nonnumerik
print(sum_all_numbers("string")) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers([1, 2, 3])) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers({"key": "value"})) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers(True)) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers(None)) # Seharusnya mencetak error dan mengembalikan None
elif test_case == "mixed_valid_invalid_test":
# Uji dengan campuran nilai yang valid dan tidak valid
print(sum_all_numbers(1, 2, "three")) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers(1, [2, 3], 4)) # Seharusnya mencetak error dan mengembalikan None
print(sum_all_numbers(1.5, "two", 3)) # Seharusnya mencetak error dan mengembalikan None
elif test_case == "empty_args_test":
# Uji tanpa argumen
print(sum_all_numbers()) # Seharusnya mengembalikan 0Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass vs objectParameter selfmethodAtributMethod Konstruktor (__init__)Rangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan DasarFungsi super()Penimpaan MethodPewarisan BergandaUrutan Resolusi MethodRingkasan: Hierarki Karyawan5Polimorfisme
Meninjau Ulang Method OverridingDuck Typingclass dan method AbstrakDesain InterfaceRingkasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanMixinsMetode Statis dan Metode ClassDecorator ClassPengelola Konteks11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola Composite3Property class
Variabel instance vs variabel classDekorator propertyAtribut privatRangkuman: Pengelola Rekening Bank6Enkapsulasi
Anggota Public, Protected, PrivateModifier AksesPenyembunyian InformasiDecorator Property Tingkat LanjutUlasan: Sistem Catatan Siswa12Proyek: Manajemen Perpustakaan
Ikhtisar Proyekclass Buku dan PenggunaSistem PeminjamanFitur PencarianAntarmuka AdminPengujian dan IntegrasiLatihan sendiri: Compiler Python online