وراثت در پایتون

ارث‌بری کلاس‌ها، override متدها، تابع super() و وراثت چندگانه

وراثت چیست؟

وراثت (Inheritance) یعنی یک کلاس (فرزند) ویژگی‌ها و متدهای کلاس دیگر (پدر) را به ارث ببرد. این کار از تکرار کد جلوگیری می‌کند.

تعریف وراثت

# کلاس پدر
class Animal:
    def __init__(self, name):
        self.name = name
    
    def eat(self):
        print(f"{self.name} در حال غذا خوردن است")

# کلاس فرزند
class Dog(Animal):  # Dog از Animal ارث می‌برد
    def bark(self):
        print(f"{self.name} هاو هاو!")

# استفاده
dog = Dog("رکس")
dog.eat()   # از کلاس پدر (Animal)
dog.bark()  # از کلاس خودش (Dog)

تابع super()

برای فراخوانی متد کلاس پدر:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal ساخته شد: {name}")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # فراخوانی سازنده پدر
        self.breed = breed
        print(f"Dog ساخته شد: {name}, {breed}")

dog = Dog("رکس", "جرمن")

Override (بازنویسی متد)

کلاس فرزند می‌تواند متد پدر را بازنویسی کند:

class Animal:
    def sound(self):
        print("صدای حیوان")

class Dog(Animal):
    def sound(self):  # override
        print("هاو هاو!")

class Cat(Animal):
    def sound(self):  # override
        print("میو میو!")

Dog().sound()  # هاو هاو!
Cat().sound()  # میو میو!

مثال کامل

class Vehicle:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model
    
    def info(self):
        return f"{self.brand} {self.model}"

class Car(Vehicle):
    def __init__(self, brand, model, doors):
        super().__init__(brand, model)
        self.doors = doors
    
    def info(self):
        return f"{super().info()} - {self.doors} در"

class Motorcycle(Vehicle):
    def __init__(self, brand, model, engine):
        super().__init__(brand, model)
        self.engine = engine
    
    def info(self):
        return f"{super().info()} - {self.engine} سی‌سی"

car = Car("تویوتا", "کمری", 4)
moto = Motorcycle("هوندا", "CBR", 600)
print(car.info())   # تویوتا کمری - 4 در
print(moto.info())  # هوندا CBR - 600 سی‌سی

وراثت چندگانه

یک کلاس می‌تواند از چند کلاس ارث ببرد:

class Flyable:
    def fly(self):
        print("در حال پرواز")

class Swimmable:
    def swim(self):
        print("در حال شنا")

class Duck(Flyable, Swimmable):
    pass

duck = Duck()
duck.fly()   # در حال پرواز
duck.swim()  # در حال شنا

بررسی نوع و ارث‌بری

print(isinstance(dog, Animal))  # True
print(isinstance(dog, Dog))    # True
print(issubclass(Dog, Animal)) # True

خلاصه

مفهومسینتکس
وراثتclass Child(Parent):
supersuper().__init__()
overrideتعریف مجدد متد در فرزند
چندگانهclass C(A, B):
بررسیisinstance(), issubclass()

این مبحث بخشی از دوره آموزش کامل پایتون است.

ابزارهای مرتبط