وراثت در پایتون
ارثبری کلاسها، 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): |
| super | super().__init__() |
| override | تعریف مجدد متد در فرزند |
| چندگانه | class C(A, B): |
| بررسی | isinstance(), issubclass() |
این مبحث بخشی از دوره آموزش کامل پایتون است.