جلسه سی و دوم
شی گرایی – وراثت
اگر کلاسی که می نویسید نسخه تخصصی کلاس دیگری است، می توانید از وراثت استفاده کنید. وقتی یک کلاس از کلاس دیگر ارث می برد، به طور خودکار تمام ویژگی ها و متدهای کلاس والد را می گیرد. کلاس فرزند در معرفی ویژگیها و متدهای جدید و لغو ویژگیها و متدهای کلاس والد آزاد است. برای ارث بردن از کلاس دیگر، هنگام تعریف کلاس جدید، نام کلاس والد را در پرانتز قرار دهید.
وراثت (Inheritance)
وراثت (Inheritance) یک مفهوم اساسی در برنامه نویسی شی گرا است. وراثت به شما امکان می دهد تا یک کلاس جدید را بر اساس کلاس موجود ایجاد کنید. این کلاس جدید به عنوان کلاس فرزند (child class) شناخته می شود و کلاس موجود به عنوان کلاس پدر (parent class) یا کلاس پایه (base class) شناخته می شود.
کلاس فرزند به طور خودکار تمام خصوصیات (attributes) و رفتارها (methods) کلاس پدر را به ارث می برد. همچنین می تواند خصوصیات و رفتارهای جدید خود را اضافه کند یا رفتارهای موجود را بازنویسی (override) کند.
اینجا یک مثال ساده از وراثت در پایتون آورده شده است:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("The animal makes a sound.")
class Dog(Animal):
def speak(self):
print("The dog barks.")
# ایجاد کلاس های فرزند
dog = Dog("Buddy")
dog.speak() # Output: The dog barks.
animal = Animal("Kitty")
animal.speak() # Output: The animal makes a sound.
در این مثال:
– کلاس `Animal` به عنوان کلاس پدر تعریف شده است.
– کلاس `Dog` به عنوان کلاس فرزند از `Animal` ایجاد شده است.
– کلاس `Dog` متد `speak` را بازنویسی کرده است تا رفتار متفاوتی از کلاس پدر نشان دهد.
– هنگام ایجاد شیء `dog` از کلاس `Dog`، متد `speak` کلاس فرزند فراخوانی می شود.
– هنگام ایجاد شیء `animal` از کلاس `Animal`، متد `speak` کلاس پدر فراخوانی می شود.
وراثت یک ویژگی قدرتمند در برنامه نویسی شی گرا است که به شما امکان می دهد کد را سازماندهی، مدیریت و توسعه دهید. این به شما کمک می کند تا از تکرار کد جلوگیری کنید و کد را سازگارتر و قابل تعمیم تر کنید.
مثال بررسی شده
class Car():
"""A simple attempt to model a car."""
def __init__(self, make, model, year):
"""Initialize car attributes."""
self.make = make
self.model = model
self.year = year
# Fuel capacity and level in gallons.
self.fuel_capacity = 15
self.fuel_level = 0
def fill_tank(self):
"""Fill gas tank to capacity."""
self.fuel_level = self.fuel_capacity
print("Fuel tank is full.")
def drive(self):
"""Simulate driving."""
print("The car is moving.")
class Battery():
"""A battery for an electric car."""
def __init__(self, size=70):
"""Initialize battery attributes."""
# Capacity in kWh, charge level in %.
self.size = size
self.charge_level = 0
def get_range(self):
"""Return the battery's range."""
if self.size == 70:
return 240
elif self.size == 85:
return 270
class ElectricCar(Car):
def __init__(self, make, model, year):
"""Initialize an electric car."""
super().__init__(make, model, year)
# Attribute specific to electric cars.
self.battery = Battery()
def charge(self):
"""Fully charge the vehicle."""
self.battery.charge_level = 100
print("The vehicle is fully charged.")
my_ecar = ElectricCar('tesla', 'model x', 2016)
my_ecar.charge()
print(my_ecar.battery.get_range())
my_ecar.drive()