Metoda __init__()
Fiecare clasă are o metodă încorporată numită __init__(), iar Python o execută de fiecare dată când clasa este folosită pentru a construi un obiect nou.
Aici este locul în care dai valori proprietăților obiectului sau faci orice altă operație de care noul obiect are nevoie atunci când este creat.
Notă: Apelul la __init__() are loc automat, o dată pentru fiecare obiect nou pe care îl creezi.
Exemplu
O clasă numită Person, a cărei metodă __init__() stochează un nume și o vârstă:
Ieșire: program Python complet
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Emil", 36)
print(p1.name)
print(p1.age)
De ce să folosim __init__()?
Dacă renunți la __init__(), proprietățile fiecărui obiect trebuie setate manual, una câte una:
Cu __init__(), valorile inițiale sunt puse chiar în momentul creării obiectului, ceea ce este mult mai simplu:
Exemplu
O clasă fără __init__():
Ieșire: program Python complet
class Person:
pass
p1 = Person()
p1.name = "Tobias"
p1.age = 25
print(p1.name)
print(p1.age)
Exemplu
Aici __init__() primește valorile inițiale în momentul în care obiectul este creat:
Ieșire: program Python complet
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("Linus", 28)
print(p1.name)
print(p1.age)
Valori implicite în __init__()
Parametrii metodei __init__() pot avea și valori implicite:
Exemplu
Dă parametrului age o valoare implicită:
Ieșire: program Python complet
class Person:
def __init__(self, name, age=18):
self.name = name
self.age = age
p1 = Person("Emil")
p2 = Person("Tobias", 25)
print(p1.name, p1.age)
print(p2.name, p2.age)
Parametri multipli
Dă metodei __init__() atâția parametri de câți are nevoie clasa ta:
Exemplu
O clasă Person care primește mai mulți parametri:
Ieșire: program Python complet
class Person:
def __init__(self, name, age, city, country):
self.name = name
self.age = age
self.city = city
self.country = country
p1 = Person("Linus", 30, "Oslo", "Norway")
print(p1.name)
print(p1.age)
print(p1.city)
print(p1.country)