Alternativa konstruktorer
I Python kan du även definiera klassmetoder med hjälp av dekoratorn @classmethod och ett särskilt första argument, cls. Klassmetoder används främst för att definiera metoder som returnerar en instans av klassen, men som inte använder samma kod som __init__().
Tänk dig att du utvecklar ett paket för tidsserier och vill definiera en egen klass för att arbeta med datum: BetterDate. Klassens attribut ska vara year, month och day. Du vill ha en konstruktor som skapar BetterDate-objekt utifrån värden för år, månad och dag, men du vill också kunna skapa BetterDate-objekt från strängar som 2020-04-30.
Följande funktioner kan vara användbara:
- Metoden
.split("-")delar upp en sträng vid"-"och returnerar en lista, t.ex. returnerar"2020-04-30".split("-")["2020", "04", "30"], int()konverterar en sträng till ett tal, t.ex. ärint("2019")lika med2019.
Den här övningen är en del av kursen
Objektorienterad programmering i Python
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)