4.1 Inizializasiya
Adətən, obyektlər yaradıldıqdan dərhal sonra hələ işləməyə hazır olmur. Əvvəlcə onlara bütün lazımlı məlumatları ötürmək lazımdır: iş parametrləri, başlanğıc dəyərlər, digər obyektlərə keçidlər və s.
Bu proses inizializasiya adlanır və obyekt yaradıldıqdan dərhal sonra baş verməlidir.
Tutaq ki, sizin Cat
(Pişik) adlı bir sinfiniz var və siz ona ad və yaş vermək istəyirsiniz, bunu bir neçə üsulla etmək olar:
Obyekt yaradıldıqdan sonra atributların inizializasiyası
Bu nümunədə əvvəlcə:
- boş bir
Cat
obyekti yaradılır. Cat
sinfininbarsik
adlı nümunəsi yaradılır.- və sonra barsik obyektinə iki atribut əlavə olunur:
name
vəage
birbaşa obyektə əlavə olunur.
class Cat:
pass
# Cat obyektinin yaradılması
barsik = Cat()
# Obyekt yaradıldıqdan sonra atributların inizializasiyası
barsik.name = "Barsik"
barsik.age = 5
print(f"Pişiyin adı: {barsik.name}, yaşı: {barsik.age}") # Çıxış: Pişiyin adı: Barsik, yaşı: 5
Atributların inizializasiyası üçün metoddan istifadə
Bu nümunədə atributları inizializasiya etmək üçün initialize
metodundan istifadə olunur. Cat
obyekti heç bir atribut olmadan yaradılır, sonra isə initialize()
metodu atributların dəyərlərinin təyin edilməsi üçün istifadə olunur.
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# Cat obyektinin yaradılması
barsik = Cat()
# Metod vasitəsilə atributların inizializasiyası
barsik.initialize("Barsik", 5)
print(f"Pişiyin adı: {barsik.name}, yaşı: {barsik.age}") # Çıxış: Pişiyin adı: Barsik, yaşı: 5
Sinif səviyyəsində sahələrdən istifadə
Bu nümunədə name
və age
atributları sinif səviyyəsində təyin olunub. barsik
obyekti yaradıldıqdan sonra atributlar birbaşa inizializasiya olunur.
class Cat:
name = ""
age = 0
# Cat obyektinin yaradılması
barsik = Cat()
# Obyekt atributlarının inizializasiyası
barsik.name = "Barsik"
barsik.age = 5
print(f"Pişiyin adı: {barsik.name}, yaşı: {barsik.age}") # Çıxış: Pişiyin adı: Barsik, yaşı: 5
Hansı üsul daha yaxşıdır? Heç biri! Ən yaxşısı konstruktor istifadə etməkdir :)
4.2 Konstruktor
Konstruktor — bu xüsusi bir metoddur ki, avtomatik
klassın yeni obyektini yaradarkən çağırılır. Konstruktor obyektin sahələrini inicializasiya etmək üçün istifadə olunur və obyektin qurulması üçün lazım olan hər hansı ilkin əməliyyatı yerinə yetirə bilər.
Python-da konstruktor __init__
adlı metoddur. Onun haqqında əsas faktlar:
-
__init__
metodu Python-da konstruktordur. O, avtomatik olaraq çağırılır, yeni bir klass nümunəsi yaradıldıqda. -
__init__
ən azı bir parametr qəbul edir —self
, hansı ki yaradılan obyektə istinad edir. Bundan əlavə, obyektin atributlarını inicializasiya etmək üçün başqa parametrlər də ötürülə bilər. -
__init__
metodu daxilində, atributların ilkin dəyərləriniself
istifadə edərək təyin edə bilərsiniz. - Konstruktor obyektin yaradılması üçün lazım olan hər hansı əməliyyatı, məsələn, giriş verilərinin yoxlanışı və ya digər obyektlərlə əlaqələrin qurulmasını həyata keçirə bilər.
Parametrlər konstruktora avtomatik olaraq ötürülür, siz sadəcə obyektin yaradılması zamanı onları dairəvi mötərizələr daxilində qeyd etməlisiniz.
Bizim pişik nümunəsini konstruktor vasitəsilə necə inicializasiya edəcəyimizə baxaq:
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# Cat obyektinin ad və yaş ilə yaradılması
barsik = Cat("Barsik", 5)
print(f"Pişiyin adı: {barsik.name}, yaşı: {barsik.age}") # Çıxış: Pişiyin adı: Barsik, yaşı: 5
Cat
tipli obyekt yaradıldıqdan sonra avtomatik olaraq __init__
metodu çağırılacaq və bu metoda üç parametr ötürüləcək:
self
parametrinə barsik obyektinə istinadname
parametrinə "Barsik" sətriage
parametrinə 5 rəqəmi
Bu rahat və gözəldir.
Verilənlərin doğrulanması
Həmçinin konstruktorda verilənlərin doğrulanmasını edə bilərsiniz. Axı konstruktorun məqsədi funksional (düzgün) obyekt yaratmaqdır, hansı ki daha sonra istifadə edilə bilər. Nümunə:
class Cat:
def __init__(self, name, age):
if age < 0: raise ValueError("Yaş mənfi ola bilməz")
self.name = name
self.age = age
# Yaşın doğrulanması ilə Cat obyektinin yaradılması
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # Çıxış: Yaş mənfi ola bilməz
GO TO FULL VERSION