021-88881776

آموزش وراثت در پایتون

1. آموزش وراثت در پایتون

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

ساختار کلی:

class ParentClass:
    def __init__(self, attribute):
        self.attribute = attribute

    def parent_method(self):
        print("This is a method in the parent class")

class ChildClass(ParentClass):
    def __init__(self, attribute, additional_attribute):
        super().__init__(attribute)
        self.additional_attribute = additional_attribute

    def child_method(self):
        print("This is a method in the child class")

توضیح:

  • کلاس ParentClass یک کلاس پایه است که دارای یک ویژگی و یک متد است.
  • کلاس ChildClass از ParentClass ارث می‌برد و یک ویژگی جدید و یک متد خاص خود را اضافه می‌کند.
  • از super() برای فراخوانی سازنده کلاس والد استفاده شده است.

مثال ساده برای ارث‌بری:

کلاس والد و فرزند:

class Vehicle:
    def __init__(self, brand, model):
        self.brand = brand
        self.model = model

    def display_info(self):
        print(f"Brand: {self.brand}, Model: {self.model}")

class Car(Vehicle):
    def __init__(self, brand, model, doors):
        super().__init__(brand, model)
        self.doors = doors

    def display_info(self):
        super().display_info()
        print(f"Doors: {self.doors}")

class Motorcycle(Vehicle):
    def __init__(self, brand, model, engine_type):
        super().__init__(brand, model)
        self.engine_type = engine_type

    def display_info(self):
        super().display_info()
        print(f"Engine Type: {self.engine_type}")

# استفاده از کلاس‌ها
car = Car("Toyota", "Corolla", 4)
motorcycle = Motorcycle("Yamaha", "MT-07", "Parallel Twin")

car.display_info()
motorcycle.display_info()

توضیح:

  • کلاس Vehicle ویژگی‌های عمومی مانند برند و مدل را تعریف می‌کند.
  • کلاس Car از Vehicle ارث می‌برد و ویژگی خاصی به نام doors را اضافه می‌کند.
  • کلاس Motorcycle نیز از Vehicle ارث می‌برد و ویژگی جدیدی به نام engine_type اضافه می‌کند.
  • از متد super() برای فراخوانی متد کلاس والد استفاده شده است.

خروجی:

Brand: Toyota, Model: Corolla
Doors: 4
Brand: Yamaha, Model: MT-07
Engine Type: Parallel Twin

ارث‌بری چندسطحی (Multilevel Inheritance):

در این نوع ارث‌بری، یک کلاس از کلاس دیگری ارث می‌برد که خود نیز از کلاس دیگری ارث برده است.

مثال:

class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        print("Some generic sound")

class Mammal(Animal):
    def __init__(self, name, has_fur):
        super().__init__(name)
        self.has_fur = has_fur

class Dog(Mammal):
    def __init__(self, name, has_fur, breed):
        super().__init__(name, has_fur)
        self.breed = breed

    def make_sound(self):
        print("Woof Woof")

# استفاده از کلاس‌ها
dog = Dog("Buddy", True, "Golden Retriever")
print(f"Name: {dog.name}, Has Fur: {dog.has_fur}, Breed: {dog.breed}")
dog.make_sound()

توضیح:

  • کلاس Animal ویژگی عمومی نام را تعریف می‌کند.
  • کلاس Mammal ویژگی خاصی به نام has_fur اضافه می‌کند.
  • کلاس Dog که از Mammal ارث می‌برد، یک ویژگی جدید به نام breed اضافه کرده و متد make_sound را بازنویسی کرده است.

خروجی:

Name: Buddy, Has Fur: True, Breed: Golden Retriever
Woof Woof

 

1.2 ارث‌بری چندگانه (Multiple Inheritance):

در این نوع ارث‌بری، یک کلاس می‌تواند از بیش از یک کلاس والد ارث ببرد.

مثال:

class Flyable:
    def fly(self):
        print("I can fly")

class Walkable:
    def walk(self):
        print("I can walk")

class Bird(Flyable, Walkable):
    def make_sound(self):
        print("Chirp Chirp")

# استفاده از کلاس
bird = Bird()
bird.fly()
bird.walk()
bird.make_sound()

 

 

توضیح:

  • کلاس Flyable و Walkable هر کدام رفتارهای خاصی را تعریف می‌کنند.
  • کلاس Bird از هر دو کلاس ارث می‌برد و رفتارهای پرواز و راه رفتن را به همراه متد جدید خود ارائه می‌دهد.

خروجی:

I can fly
I can walk
Chirp Chirp

 

2. گسترش کلاس‌ها و استفاده از متدهای پدر و مادر

شما می‌توانید کلاس‌هایی را ایجاد کنید که از کلاس‌های موجود ارث ببرند و متدهای جدید یا ویژگی‌هایی به آن‌ها اضافه کنند. همچنین می‌توانید از متدهای والد (Parent) در کلاس فرزند (Child) استفاده کنید.

ساختار کلی برای گسترش کلاس:

class ParentClass:
    def __init__(self, attribute):
        self.attribute = attribute

    def parent_method(self):
        print(f"Attribute from parent: {self.attribute}")

class ChildClass(ParentClass):
    def __init__(self, attribute, child_attribute):
        super().__init__(attribute)
        self.child_attribute = child_attribute

    def child_method(self):
        print(f"Attribute from child: {self.child_attribute}")

 

 

توضیح:

  • کلاس فرزند از ویژگی‌ها و متدهای کلاس والد ارث می‌برد.
  • با استفاده از super()، می‌توانید سازنده (Constructor) کلاس والد را فراخوانی کنید.

 

مثال برای گسترش کلاس و استفاده از متدهای والد:

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

    def display_info(self):
        print(f"Name: {self.name}, Salary: {self.salary}")

class Manager(Employee):
    def __init__(self, name, salary, department):
        super().__init__(name, salary)
        self.department = department

    def display_info(self):
        super().display_info()  # فراخوانی متد کلاس والد
        print(f"Department: {self.department}")

# استفاده از کلاس‌ها
manager = Manager("Ali", 50000, "IT")
manager.display_info()

 

خروجی:

Name: Ali, Salary: 50000
Department: IT

 

 

توضیح:

  • کلاس Employee ویژگی‌ها و متدی برای نمایش اطلاعات عمومی دارد.
  • کلاس Manager از Employee ارث می‌برد و ویژگی جدیدی به نام department اضافه می‌کند.
  • متد display_info در کلاس Manager متد کلاس والد را گسترش می‌دهد.

 

بازنویسی متدها (Method Overriding):

شما می‌توانید متدی از کلاس والد را در کلاس فرزند بازنویسی کنید تا رفتار جدیدی ارائه دهید.

مثال:

class Animal:
    def make_sound(self):
        print("Some generic animal sound")

class Dog(Animal):
    def make_sound(self):
        print("Woof Woof")

# استفاده از کلاس‌ها
animal = Animal()
dog = Dog()

animal.make_sound()  # خروجی: Some generic animal sound
dog.make_sound()     # خروجی: Woof Woof

 

 

توضیح:

  • کلاس Dog متد make_sound را بازنویسی کرده است تا صدای خاص سگ را تولید کند.

مثال پیشرفته:

class Vehicle:
    def start_engine(self):
        print("Engine started")

class ElectricCar(Vehicle):
    def start_engine(self):
        print("Electric engine started silently")

# استفاده از کلاس‌ها
vehicle = Vehicle()
electric_car = ElectricCar()

vehicle.start_engine()      # خروجی: Engine started
electric_car.start_engine() # خروجی: Electric engine started silently

توضیح:

  • کلاس ElectricCar متد start_engine را بازنویسی کرده تا رفتار موتور الکتریکی را شبیه‌سازی کند.

 

ترکیب متدهای والد و فرزند:

در پایتون می‌توانید متدهای کلاس والد را در کنار متدهای کلاس فرزند استفاده کنید.

مثال:

class Shape:
    def __init__(self, color):
        self.color = color

    def display_info(self):
        print(f"Color: {self.color}")

class Rectangle(Shape):
    def __init__(self, color, width, height):
        super().__init__(color)
        self.width = width
        self.height = height

    def display_info(self):
        super().display_info()  # فراخوانی متد کلاس والد
        print(f"Width: {self.width}, Height: {self.height}")

# استفاده از کلاس‌ها
rectangle = Rectangle("Red", 10, 5)
rectangle.display_info()

خروجی:

Color: Red
Width: 10, Height: 5

توضیح:

  • کلاس Rectangle از ویژگی‌ها و متد کلاس Shape استفاده می‌کند و اطلاعات جدیدی اضافه می‌کند.

 

ترکیب ویژگی‌های اضافی با متدهای والد:

مثال:

class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"Hello, my name is {self.name}.")

class Student(Person):
    def __init__(self, name, school):
        super().__init__(name)
        self.school = school

    def greet(self):
        super().greet()
        print(f"I study at {self.school}.")

# استفاده از کلاس‌ها
student = Student("Sara", "High School")
student.greet()

خروجی:

Hello, my name is Sara.
I study at High School.

توضیح:

  • کلاس Student متد greet را از کلاس والد گسترش می‌دهد و اطلاعات اضافی اضافه می‌کند.

 

به طور کلی می توان گفت:

گسترش کلاس‌ها و استفاده از متدهای پدر و مادر در پایتون یکی از قابلیت‌های قدرتمند این زبان برای توسعه کدهای مقیاس‌پذیر و قابل استفاده مجدد است. با استفاده از ارث‌بری و بازنویسی متدها، می‌توان کلاس‌های جدیدی ایجاد کرد که ویژگی‌ها و رفتارهای متفاوتی ارائه دهند، در حالی که هنوز از ساختار و قابلیت‌های کلاس‌های والد بهره می‌برند. این روش، نه تنها باعث کاهش کدنویسی تکراری می‌شود، بلکه به توسعه‌دهندگان این امکان را می‌دهد تا سیستم‌هایی پیچیده‌تر و قابل مدیریت‌تر ایجاد کنند. به همین دلیل، درک عمیق از ارث‌بری و نحوه استفاده از متدهای والد و فرزند، برای برنامه‌نویسان شیءگرا ضروری است.

آموزش وراثت در پایتون

دیدگاه های شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *