Python'da Soyut Sınıflar
Bu makale, Python'daki soyut sınıfları açıklar.
abc
modülünü kullanarak soyut sınıfların temel mekanizmasını açıklayacağız, pratik örnekler vereceğiz ve her şeyi eşlik eden kodlarla anlatacağız.
YouTube Video
Python'da Soyut Sınıflar
Python'un abc
modülü (Soyut Temel Sınıflar), standart kütüphanenin bir parçasıdır ve soyut sınıfları tanımlamak için kullanılır; bir sınıfın uygulaması gereken yöntemler için bir şablon sağlar. Bu modülü kullanmak, sınıf tasarımında esneklik ve sağlamlık sağlar.
Soyut Sınıf Nedir?
Soyut sınıflar, somut (örneklendirilebilir) sınıflar için ortak bir arayüz tanımlamak için kullanılan sınıflardır. Soyut sınıflar doğrudan örneklendirilemez; türetilmiş (alt) sınıflarda somut bir uygulama sağlanmalıdır.
abc
modülü, soyut yöntemler veya özellikler tanımlamanıza ve bunların mirasçı sınıflarda uygulanmasını zorlamanıza olanak tanır. Bir tane bile soyut yöntem uygulanmamışsa, sınıf örneklendirilemez.
abc
Modülü Nasıl Kullanılır
abc
modülünü kullanarak bir soyut sınıf oluşturmak için, ABC
sınıfından miras alın ve soyut yöntemleri @abstractmethod
dekoratörü ile tanımlayın.
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"
Burada, Animal
sınıfı bir soyut sınıf olarak tanımlanır ve sound
adlı bir soyut yöntem içerir. Bu yöntem, alt sınıflarda somut olarak uygulanmalıdır. Dog
ve Cat
, Animal
sınıfından miras alır ve her biri sound
yöntemini uygular.
Soyut Sınıfların Örneklenmesi
Soyut sınıflar doğrudan örneklenemez. Örneğin, Animal
sınıfını bizzat örneklemeye çalışmak bir hataya neden olacaktır.
1animal = Animal() # TypeError: Can't instantiate abstract class Animal with abstract methods sound
- Bir soyut sınıfı örneklemeye çalışıldığında Python, uygulanmamış soyut yöntemler olduğunu belirler ve bir
TypeError
oluşturur. Gerekli tüm soyut yöntemler alt sınıfta uygulanırsa, örnekleme mümkün hale gelir.
Birden Fazla Soyut Yöntem
Bir sınıfın birden fazla soyut yönteme sahip olması da mümkündür. Tüm soyut yöntemler bir alt sınıfta uygulanmadığı sürece, sınıf bir soyut sınıf olarak kalır.
1from abc import ABC, abstractmethod
2
3class Vehicle(ABC):
4
5 @abstractmethod
6 def start_engine(self):
7 pass
8
9 @abstractmethod
10 def stop_engine(self):
11 pass
12
13class Car(Vehicle):
14 def start_engine(self):
15 return "Car engine started"
16
17 def stop_engine(self):
18 return "Car engine stopped"
Bu örnekte, Vehicle
sınıfının iki soyut metodu vardır ve Car
sınıfı yalnızca her iki metodun da uygulanmasından sonra oluşturulabilir.
Soyut Özelliklerin Tanımlanması
abc
modülü yalnızca soyut metodları değil, aynı zamanda soyut özellikleri de destekler. Bu, türetilmiş sınıflarda özelliklerin uygulanmasını zorunlu kılmayı sağlar.
1from abc import ABC, abstractmethod
2
3class Shape(ABC):
4
5 @property
6 @abstractmethod
7 def area(self):
8 pass
9
10class Circle(Shape):
11 def __init__(self, radius):
12 self.radius = radius
13
14 @property
15 def area(self):
16 return 3.14159 * (self.radius ** 2)
- Bu örnekte,
Shape
sınıfınınarea
adında bir soyut özelliği vardır veCircle
alt sınıfı bu özelliği somutlaştırır. Bu şekilde, soyut sınıfları özellik uygulamalarını zorlamak için kullanmak, kod tutarlılığını sağlamaya yardımcı olur.
isinstance()
ve issubclass()
Kullanımı
Soyut sınıfları kullanarak, isinstance()
veya issubclass()
ile sınıf kalıtım ilişkilerini doğrulayabilir ve kodun güvenliğini ve esnekliğini artırabilirsiniz.
1from abc import ABC, abstractmethod
2
3# Definition of the abstract base class
4class Animal(ABC):
5
6 @abstractmethod
7 def sound(self):
8 pass
9
10# Concrete implementation in the subclass
11class Dog(Animal):
12 def sound(self):
13 return "Woof!"
14
15class Cat(Animal):
16 def sound(self):
17 return "Meow!"
18
19class Vehicle(ABC):
20
21 @abstractmethod
22 def start_engine(self):
23 pass
24
25 @abstractmethod
26 def stop_engine(self):
27 pass
28
29class Car(Vehicle):
30 def start_engine(self):
31 return "Car engine started"
32
33 def stop_engine(self):
34 return "Car engine stopped"
35
36print("Dog() is an Animal? -> ", isinstance(Dog(), Animal)) # True
37print("Dog is subclass of Animal? -> ", issubclass(Dog, Animal)) # True
38print("Cat() is a Vehicle? -> ", isinstance(Cat(), Vehicle)) # False
isinstance()
, bir nesnenin belirtilen bir sınıfın örneği olup olmadığını kontrol etmek için, issubclass()
ise bir sınıfın belirtilen bir sınıfın alt sınıfı olup olmadığını kontrol etmek için kullanılır.
Özet
abc
modülünü kullanarak soyut sınıflar tasarlayarak, sınıflar arasındaki arayüzü netleştirebilir ve gerekli metodların ve özelliklerin uygulanmasını zorunlu hale getirebilirsiniz. Bu, kod tutarlılığını sağlamaya ve hataları azaltmaya yardımcı olur, bu da özellikle geniş ölçekli projeler için faydalıdır.
Soyut sınıflar, Python'da esnek nesne yönelimli programlamayı destekleyen, sınıf yeniden kullanılabilirliğini ve sürdürülebilirliğini artıran önemli bir araçtır.
Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.