Sınıflar, Nesneler, Miras ve Çok Biçimlilik
1. Sınıflar ve Nesneler
Sınıflar, nesneleri tanımlamak için kullanılan şablonlardır. Nesneler ise sınıflardan oluşturulan bireysel örneklerdir.
Sınıf Tanımlama:
python
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return "Woof!"
Nesne Oluşturma:
python
my_dog = Dog(name="Buddy", age=5)
print(my_dog.name) # Buddy
print(my_dog.bark()) # Woof!
2. Miras (Inheritance)
Miras, bir sınıfın özelliklerini ve metodlarını başka bir sınıfa aktarmak için kullanılır. Bu, kodun yeniden kullanılabilirliğini ve organizasyonunu artırır.
Miras Kullanımı:
python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Some sound"
class Cat(Animal):
def speak(self):
return "Meow!"
class Dog(Animal):
def speak(self):
return "Woof!"
Miras ile Nesne Oluşturma:
python
my_cat = Cat(name="Whiskers")
print(my_cat.name) # Whiskers
print(my_cat.speak()) # Meow!
my_dog = Dog(name="Rex")
print(my_dog.name) # Rex
print(my_dog.speak()) # Woof!
3. Çok Biçimlilik (Polymorphism)
Çok biçimlilik, farklı sınıfların aynı isimli metodları farklı şekilde uygulamasına olanak tanır. Bu, aynı metodu çağırarak farklı davranışları elde etmemizi sağlar.
Çok Biçimlilik Örneği:
python
animals = [Cat("Whiskers"), Dog("Rex")]
for animal in animals:
print(animal.speak()) # Meow! \n Woof!
4. Dunder (Magic) Metodlar
Dunder metodlar (ya da sihirli metodlar), Python'da özel davranışları tanımlamak için kullanılır. Bu metodlar, çift alt çizgi ile başlar ve biter.
__init__
Nesne oluşturulduğunda çağrılır. Sınıfın yapıcısıdır.
python
class Person:
def __init__(self, name):
self.name = name
__str__
Nesne yazdırıldığında çağrılır. Nesnenin string temsili döner.
python
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person(name={self.name})"
__repr__
Nesnenin temsilini döner ve genellikle debugging için kullanılır.
python
class Person:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"Person('{self.name}')"
__len__
Nesnenin uzunluğunu döner (örneğin, bir koleksiyonun uzunluğunu).
python
class Box:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
__add__
İki nesneyi toplamak için kullanılır.
python
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
__eq__
İki nesneyi eşitlik açısından karşılaştırmak için kullanılır.
python
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
return self.x == other.x and self.y == other.y