Alternatif kurucular
Python, @classmethod dekoratörü ve özel bir ilk argüman olan cls ile sınıf metotları tanımlamana da izin verir. Sınıf metotlarının ana kullanım alanı, __init__() ile aynı kodu kullanmadan, sınıfın bir örneğini döndüren metotlar tanımlamaktır.
Örneğin, bir zaman serisi paketi geliştiriyorsun ve tarihlerle çalışmak için kendi sınıfını, BetterDate'i tanımlamak istiyorsun. Sınıfın öznitelikleri year, month ve day olacak. Yıla, aya ve güne ait değerler verildiğinde BetterDate nesneleri oluşturan bir kurucuya sahip olmak istiyorsun, ama aynı zamanda 2020-04-30 gibi dizelerden de BetterDate nesneleri oluşturabilmek istiyorsun.
Aşağıdaki işlevler işine yarayabilir:
.split("-")metodu, bir dizgeyi"-"karakterinden bölerek bir diziye ayırır; örneğin"2020-04-30".split("-")ifadesi["2020", "04", "30"]döndürür,int()bir dizgeyi sayıya dönüştürür; örneğinint("2019")değeri2019'dur.
Bu egzersiz
Python'da Nesne Yönelimli Programlama
kursunun bir parçasıdırUygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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)