Konstruktor alternatif
Python juga memungkinkan Anda mendefinisikan metode kelas menggunakan dekorator @classmethod dan argumen pertama khusus cls. Penggunaan utama metode kelas adalah untuk mendefinisikan metode yang mengembalikan sebuah instance dari kelas, tetapi tidak menggunakan kode yang sama dengan __init__().
Sebagai contoh, Anda sedang mengembangkan paket deret waktu dan ingin mendefinisikan kelas Anda sendiri untuk bekerja dengan tanggal, BetterDate. Atribut kelas ini adalah year, month, dan day. Anda ingin memiliki konstruktor yang membuat objek BetterDate dari nilai tahun, bulan, dan hari, tetapi Anda juga ingin dapat membuat objek BetterDate dari string seperti 2020-04-30.
Anda mungkin menemukan fungsi-fungsi berikut berguna:
- Metode
.split("-")akan membagi string pada"-"menjadi sebuah array, misalnya"2020-04-30".split("-")mengembalikan["2020", "04", "30"], int()akan mengonversi string menjadi angka, misalnyaint("2019")adalah2019.
Latihan ini adalah bagian dari kursus
Pemrograman Berorientasi Objek di Python
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
class BetterDate:
# Constructor
def __init__(self, year, month, day):
# Recall that Python allows multiple variable assignments in one line
self.year, self.month, self.day = year, month, day
# Define a class method from_str
____
def from_str(____, datestr):
# Split the string at "-" and convert each part to integer
parts = datestr.split("-")
year, month, day = int(parts[0]), ____, ____
# Return the class instance
____ ____(____, ____, ____)
bd = BetterDate.from_str('2020-04-30')
print(bd.year)
print(bd.month)
print(bd.day)