- OOP və Sinif Konsepsiyaları
- Dunder (Sehrli) Metodlar
- İrsi
- @staticmethod
- @classmethod
- Xülasə
- Tapşırıqlar
Obyekt-Yönümlü Proqramlaşdırma (OOP) obyektlər və siniflərdən istifadə edərək kodu strukturlaşdıran proqramlaşdırma paradiqmasıdır. Sinif obyektlər yaratmaq üçün bir şablondur və obyekt sinifin bir nümunəsidir.
Sinif class açar sözü, sinif adı və iki nöqtə ilə təyin edilir. Sinif metodlar (funksiyalar) və atributlar (dəyişənlər) ehtiva edir.
class Car:
def __init__(self, brand, model, year, color):
self.brand = brand
self.model = model
self.year = year
self.color = color
def drive(self):
print(f"{self.brand} {self.model} sürülür...")
def stop(self):
print(f"{self.brand} {self.model} dayanır...")
car1 = Car("BMW", "X5", 2021, "Qara")
car2 = Car("Ford", "Mustang", 2022, "Mavi")
car1.drive()
car2.drive()
car1.stop()Çıxış:
BMW X5 sürülür...
Ford Mustang sürülür...
BMW X5 dayanır...
İzah: Car sinifinin atributlarını başlatan __init__ metodu var. drive və stop metodları sinifin davranışını təyin edir. Biz Car sinifinin iki nümunəsini yaradırıq və onların metodlarını çağırırıq.
Atributlar sinifə aid olan dəyişənlərdir və metodlar sinifə aid olan funksiyalardır.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(f"Salam, mənim adım {self.name} və mən {self.age} yaşındayam.")
person1 = Person("Alice", 30)
person1.greet()Çıxış:
Salam, mənim adım Alice və mən 30 yaşındayam.
İzah: Person sinifinin iki atributu, name və age, və bir metodu, greet, var. greet metodu atributlardan istifadə edərək salam mesajı çap edir.
Dunder (Double UNDERscore) metodlar, həmçinin sehrli metodlar kimi tanınır, Python-da iki alt xətt ilə başlayan və bitən xüsusi metodlardır. Onlar obyektlərin daxili əməliyyatlar üçün davranışını təyin etməyə imkan verir.
class Character:
def __init__(self, name):
self.name = name
self.health = 100
self.arr = ['A', 'B', 'C']
def is_died(self):
return self.health == 0
def damage(self, value):
self.health = max(0, self.health - value)
def __str__(self):
return f"{self.name} ilə {self.health}HP"
def __len__(self):
return self.health
def __getitem__(self, item):
return self.arr[item]
def __eq__(self, other):
return self.health == other.health
def __lt__(self, other):
return self.health < other.health
def __add__(self, other):
return self.health + other.health
alpha = Character(name="Alpha")
beta = Character(name="Beta")
print(len(alpha))
print(alpha)
print(alpha[1])
print(alpha == beta)
alpha.damage(75)
print(alpha < beta)
print(alpha + beta)Çıxış:
100
Alpha ilə 100HP
B
Doğru
Doğru
125
İzah: Character sinifi bir neçə dunder metodunu təyin edir ki, onun davranışını fərdiləşdirsin. __str__ metodu obyektin sətir təsvirini təyin edir, __len__ metodu obyektin uzunluğunu (sağlamlıq) qaytarır və __getitem__ metodu indeksləşdirməyə imkan verir. __eq__, __lt__ və __add__ metodları bərabərlik, kiçik və toplama əməliyyatlarını təyin edir.
İrsi bir sinifin başqa bir sinifdən atributlar və metodlar miras almasına imkan verir. Miras alan sinif uşaq sinif adlanır və miras alınan sinif valideyn sinif adlanır.
class Person:
def __init__(self, full_name, age):
self.full_name = full_name
self.age = age
def greet(self):
print(f"Salam!")
def show_info(self):
print("Tam Ad:", self.full_name)
print("Yaş:", self.age)
class Student(Person):
def __init__(self, full_name, age, grade):
super().__init__(full_name, age)
self.grade = grade
def say_grade(self):
super().greet()
print(f"{self.full_name}'nin qiyməti {self.grade}")
def show_info(self):
super().show_info()
print("Qiymət:", self.grade)
student1 = Student('John Doe', 13, 7)
person1 = Person("Nazim Ramazanli", 30)
student1.say_grade()
student1.show_info()
person1.show_info()Çıxış:
Salam!
John Doe'nin qiyməti 7
Tam Ad: John Doe
Yaş: 13
Qiymət: 7
Tam Ad: Nazim Ramazanli
Yaş: 30
İzah: Student sinifi Person sinifindən miras alır. O, valideyn sinifinin metodlarını və atributlarını çağırmaq üçün super() funksiyasından istifadə edir. Student sinifi yeni atribut grade əlavə edir və show_info metodunu yenidən təyin edir.
@staticmethod dekoratoru sinifin nümunəsi olmadan çağırıla bilən statik metodu təyin edir. Statik metodlar nümunə (self) və ya sinif (cls) dəyişənlərinə çıxış əldə etmir.
class Calculator:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def subtract(x, y):
return x - y
print(Calculator.add(3, 4))
print(Calculator.subtract(10, 5))Çıxış:
7
5
İzah: Calculator sinifi @staticmethod dekoratorundan istifadə edərək iki statik metod, add və subtract, təyin edir. Bu metodlar sinifdə nümunə yaratmadan birbaşa çağırıla bilər.
@classmethod dekoratoru sinif metodunu təyin edir ki, bu da sinifi özü (cls) birinci arqument kimi qəbul edir. Sinif metodları sinif səviyyəli dəyişənlərə çıxış əldə edə və onları dəyişdirə bilər.
class Student:
student_count = 0
instances = []
def __init__(self, name, score):
self.name = name
self.score = score
Student.student_count += 1
Student.instances.append(self)
@classmethod
def get_student_count(cls):
return f"Tələbə sayı: {cls.student_count}"
@classmethod
def convert(cls, students):
result = []
for student in students:
result.append(cls(student["name"], student["score"]))
return result
bob = Student('Bob', 93)
alice = Student('Alice', 89)
mark = Student('Mark', 75)
print(Student.get_student_count())
data = [
{"name": "Nihad", "score": 95},
{"name": "Akif", "score": 83},
{"name": "Nilay", "score": 94},
]
converted_data = Student.convert(data)
print(*[f"{instance.name}'nin balı {instance.score}" for instance in converted_data], sep='\n')Çıxış:
Tələbə sayı: 3
Nihad'ın balı 95
Akif'in balı 83
Nilay'ın balı 94
İzah: Student sinifi @classmethod dekoratorundan istifadə edərək iki sinif metodu, get_student_count və convert, təyin edir. get_student_count metodu tələbə nümunələrinin sayını qaytarır və convert metodu lüğətlər siyahısını Student nümunələri siyahısına çevirir.
Bu fəsildə biz Obyekt-Yönümlü Proqramlaşdırma konsepsiyalarını, siniflərin təyin edilməsini, dunder (sehrli) metodları, irsi, statik metodları və sinif metodlarını əhatə etdik.
Animalsinifininamevəspeciesatributları vəspeakvəinfometodları ilə təyin edin.Animalsinifindən miras alan və yenibarkmetodu əlavə edənDogalt sinifini yaradın.- Əlavə, çıxarma, vurma və bölmə üçün statik metodları olan
MathOperationssinifini təyin edin. - İşçilərin sayını izləmək və lüğətlər siyahısını
Employeenümunələri siyahısına çevirmək üçün sinif metodları olanEmployeesinifini təyin edin.