Kom igångKom igång gratis

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. är int("2019") lika med 2019.

Den här övningen är en del av kursen

Objektorienterad programmering i Python

Visa kurs

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)
Redigera och kör kod