مانند هر زبان شی گرای دیگر، پایتون نیز از مفهوم وراثت کلاس پشتیبانی می کند. وراثت به ما اجازه می دهد تا یک کلاس جدید را از دل یک کلاس موجود ایجاد کنیم.کلاس جدیدی که ایجاد می شود به عنوان زیر کلاس (کلاس فرزند یا مشتق شده) و کلاس موجود که کلاس فرزند از آن مشتق شده است به عنوان سوپرکلاس (کلاس والد یا پایه) شناخته می شود.زیر کلاس یا کلاس فرزند کلاسی است که ارث می برد. سوپرکلاس یا کلاس والد کلاسی است که متدها و/یا ویژگی ها از آن به ارث برده می شوند.بگذارید برای بررسی این مفهوم به سراغ مثال قبلی برویم.

class Person:
    def __init__(self, first_name, last_name, IDnumber ):
        self.firstname=first_name
        self.lastname=last_name
        self.ID=IDnumber
        self.salary = None

    def set_salary(self, salary):
        self.salary = salary

کلاس Person می تواند اعضای شاغل در یک شرکت را تولید کند و بعضی ویژگی های مربوط به انها را مشخص کند. مثل نام و نام خانوادگی و شماره پرسنلی و حقوق.

اما همه اعضای یک شرکت لزوما موقعیت های مشابهی ندارند. فرض کنید قصد داریم اعضای یک شرکت را به دو دسته کارمند و سهامدار تقسیم کنیم. بنابراین لازم است برای هر کدام یک کلاس جداگانه تعریف نماییم. اما بعضی خصوصیات هر دو دسته مشابه هم است. مثلا هر دو نام و نام خانوادگی دارند. بازنویسی همه آن کد برای هر کلاس جدید اتلاف وقت، تلاش و حافظه است.

اما یک کارمند اضافه حقوق ماهانه و سهامدار سود ماهانه دریافت می کند. پس قسمتهایی از کلاس ها نیز با هم تفاوت دارند.

بنابراین ما دو کلاس فرزند ایجاد می کنیم که کلاس والد آنها Person است. ابتدا کلاس کارمند یا employee را می نویسیم:

class Employee(Person):
    def __init__(self, first_name, last_name, IDnumber, hourly_rate):
        super().__init__(first_name, last_name, IDnumber)
        self.hourly_rate = hourly_rate

    def calculate_monthly_payment(self, extra_hours):
        return self.hourly_rate * extra_hours

این کلاسی به نام Employee است که از کلاس Person ارث می برد. کلاس Employee چهار ویژگی دارد: first_name، last_name، IDnumber و hourly_rate. متد __init__ این ویژگی ها را مقداردهی اولیه می کند و تابع ()super برای فراخوانی سازنده کلاس والد Person استفاده می شود. متد calculate_monthly_payment، پرداخت اضافه حقوق ماهانه را بر اساس نرخ ساعتی و تعداد ساعات اضافه کار محاسبه می کند.

در اینجا مثالی از نحوه ایجاد یک شیء Employee و استفاده از متد calculate_monthly_payment آورده شده است:

kamran = Employee('Kamran' , 'Hamidi' , '1257148' , 500000)
extra_hours = 5
monthly_payment = kamran.calculate_monthly_payment(extra_hours)  
print(monthly_payment)

حالا کلاس سهام دار یا Shareholder را می نویسیم:

class Shareholder(Person):
    def __init__(self, first_name, last_name, IDnumber, share_percentage):
        super().__init__(first_name, last_name, IDnumber)
        self.share_percentage = share_percentage

    def calculate_monthly_profit(self, total_monthly_benefit):
        return self.share_percentage * total_monthly_benefit

این کلاسی به نام Shareholder است که از کلاس Person ارث می برد. کلاس Shareholder چهار ویژگی دارد: first_name، last_name، IDnumber و share_percentage. متد __init__ این ویژگی ها را مقداردهی اولیه می کند و تابع ()super برای فراخوانی سازنده کلاس والد Person استفاده می شود. متد calculate_monthly_profit سود ماهانه را بر اساس درصد سهم و کل سود ماهانه محاسبه می کند.

در اینجا مثالی از نحوه ایجاد یک شی Shareholder و استفاده از متد calculate_monthly_profit آورده شده است:

bahman = Shareholder('Bahman', 'Kianersi', '18754' , 0.1)
total_monthly_benefit = 50000000
monthly_profit = bahman.calculate_monthly_profit(total_monthly_benefit)
print(monthly_profit)