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
Catobyekti yaradılır. Catsinfininbarsikadlı nümunəsi yaradılır.- və sonra barsik obyektinə iki atribut əlavə olunur:
namevəagebirbaş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əriniselfistifadə 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:
selfparametrinə barsik obyektinə istinadnameparametrinə "Barsik" sətriageparametrinə 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