Python'da Soyut Sınıflar

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ın area adında bir soyut özelliği vardır ve Circle 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.

YouTube Video