جلسه سی و دوم
شی گرایی – وراثت
اگر کلاسی که می نویسید نسخه تخصصی کلاس دیگری است، می توانید از وراثت استفاده کنید. وقتی یک کلاس از کلاس دیگر ارث می برد، به طور خودکار تمام ویژگی ها و متدهای کلاس والد را می گیرد. کلاس فرزند در معرفی ویژگیها و متدهای جدید و لغو ویژگیها و متدهای کلاس والد آزاد است. برای ارث بردن از کلاس دیگر، هنگام تعریف کلاس جدید، نام کلاس والد را در پرانتز قرار دهید.
وراثت (Inheritance)
وراثت (Inheritance) یک مفهوم اساسی در برنامه نویسی شی گرا است. وراثت به شما امکان می دهد تا یک کلاس جدید را بر اساس کلاس موجود ایجاد کنید. این کلاس جدید به عنوان کلاس فرزند (child class) شناخته می شود و کلاس موجود به عنوان کلاس پدر (parent class) یا کلاس پایه (base class) شناخته می شود.
کلاس فرزند به طور خودکار تمام خصوصیات (attributes) و رفتارها (methods) کلاس پدر را به ارث می برد. همچنین می تواند خصوصیات و رفتارهای جدید خود را اضافه کند یا رفتارهای موجود را بازنویسی (override) کند.
اینجا یک مثال ساده از وراثت در پایتون آورده شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<xmp>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. </xmp> |
در این مثال:
– کلاس Animal
به عنوان کلاس پدر تعریف شده است.
– کلاس Dog
به عنوان کلاس فرزند از Animal
ایجاد شده است.
– کلاس Dog
متد speak
را بازنویسی کرده است تا رفتار متفاوتی از کلاس پدر نشان دهد.
– هنگام ایجاد شیء dog
از کلاس Dog
، متد speak
کلاس فرزند فراخوانی می شود.
– هنگام ایجاد شیء animal
از کلاس Animal
، متد speak
کلاس پدر فراخوانی می شود.
وراثت یک ویژگی قدرتمند در برنامه نویسی شی گرا است که به شما امکان می دهد کد را سازماندهی، مدیریت و توسعه دهید. این به شما کمک می کند تا از تکرار کد جلوگیری کنید و کد را سازگارتر و قابل تعمیم تر کنید.
مثال بررسی شده
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<xmp>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()</xmp> |