بايثون مثال يوضح الفائدة من تعريف كلاس مجرّد

في المثال التالي قمنا ببناء كلاس مجرّد إسمه Person يحتوي على الدالة __init__() التي وضعنا فيها 4 خصائص إسمهم name, gender, brithday و is_married, بالإضافة إلى دالة مجرّدة و فارغة إسمها print_info().

بعدها قمنا بتعريف كلاس إسمه Student يرث من الكلاس Person و يملك خاصية إضافية إسمها specialization.
بعدها قمنا بتعريف كلاس إسمه Employee يرث من الكلاس Person و يملك خاصية إضافية إسمها salary.
الفكرة هنا أن أي كلاس سيتم إنشاءه لتمثيل إنسان يجب أن يرث من الكلاس Person الذي يملك الخصائص المشتركة لكل البشر و يجب أن يفعل Override للدالة print_info() حتى تعرض كل قيم الخصائص الموجودة في الكلاس الذي ورثها بشكل مرتب.

في الأخير قمنا بإنشاء كائن من الكلاس Student و كائن من الكلاس Employee و إستدعاء الدالة print_info() من كل واحد منهما.


مثال

Person.py
# حتى نستطيع استخدامهما abc الموجودين في الموديول @abstractmethod و الكلمة ABC هنا قمنا بتضمين الكلاس
from abc import ABC, abstractmethod


# هذا الكلاس يعتبر الكلاس الأساسي لأي إنسان حيث أن كل إنسان يملك معلومات أساسية مثل: إسم, جنس, تاريخ ميلاد و الوضع الإجتماعي
# حتى يصبح كلاس مجرّد ABC جعلنا هذا الكلاس يرث من الكلاس 
class Person(ABC):

    # التي نريد أن يتمكلها أي شخص يتم تعريفه Person التي وضعنا فيها خصائص الكلاس __init__() هنا قمنا بتعريف الدالة
    def __init__(self, name, gender, birthday, is_married):
        self.name = name
        self.gender = gender
        self.birthday = birthday
        self.is_married = is_married

	# الكلاس الذي يرثها ليحدد كيف يريد أن يتم عرض خصائص الأشخاص Override هذه الدالة يجب أن يفعل لها
    @abstractmethod
    def print_info(self):
        pass
		

Student.py
# حتى نستطيع الوراثة منه Person.py الموجود في الملف Person هنا قمنا بتضمين الكلاس
from Person import Person


# لأنه يمكنه الإستفادة منه Person يعتبر الكلاس الأساسي لإنشاء أي طالب, هذا الكلاس جعلناه يرث من الكلاس Student هنا قمنا بتعريف كلاس إسمه
class Student(Person):

    # و التي سيملكها أي كائن ننشئه منه Student التي وضعنا فيها خصائص الكلاس __init__() هنا قمنا بتعريف الدالة
    def __init__(self, name, gender, birthday, is_married, specialization):
        # التي ندخلها عند إنشاء كائن name و gender, birthday, is_married و مررنا لها قيم الباراميترات Person الموجودة في الكلاس __init__() هنا قمنا باستدعاء الدالة
        super().__init__(name, gender, birthday, is_married)
        # التي ذكرناها في هذا الكلاس سيتم إعطائها آخر قيمة نمررها في أقواس الكائن الذي ننشئه من هذا الكلاس specialization الخاصية
        self.specialization = specialization

    # Student لتحديد كيف سيتم طباعة كل قيم الخصائص التي يمتكلها أي كائن ننشئه من الكلاس print_info() للدالة  Override هنا فعلنا
    def print_info(self):
        print('name:', self.name)
        print('gender:', self.gender)
        print('birthday:', self.birthday)
        print('is married:', self.is_married)
        print('specialization:', self.specialization)
        print('-----------------------------')
		

Employee.py
# حتى نستطيع الوراثة منه Person.py الموجود في الملف Person هنا قمنا بتضمين الكلاس
from Person import Person


# لأنه يمكنه الإستفادة منه Person يعتبر الكلاس الأساسي لإنشاء أي طالب, هذا الكلاس جعلناه يرث من الكلاس Employee هنا قمنا بتعريف كلاس إسمه
class Employee(Person):

    # و التي سيملكها أي كائن ننشئه منه Employee التي وضعنا فيها خصائص الكلاس __init__() هنا قمنا بتعريف الدالة
    def __init__(self, name, gender, birthday, is_married, salary):
        # التي ندخلها عند إنشاء كائن name و gender, birthday, is_married و مررنا لها قيم الباراميترات Person الموجودة في الكلاس __init__() هنا قمنا باستدعاء الدالة
        super().__init__(name, gender, birthday, is_married)
        # التي ذكرناها في هذا الكلاس سيتم إعطائها آخر قيمة نمررها في أقواس الكائن الذي ننشئه من هذا الكلاس salary الخاصية
        self.salary = salary

    # Employee لتحديد كيف سيتم طباعة كل قيم الخصائص التي يمتكلها أي كائن ننشئه من الكلاس print_info() للدالة  Override هنا فعلنا
    def print_info(self):
        print('name:', self.name)
        print('gender:', self.gender)
        print('birthday:', self.birthday)
        print('is married:', self.is_married)
        print('salary:', self.salary)
        print('-----------------------------')
		

Test.py
# حتى نستطيع إنشاء كائنات منهما Employee.py الموجود في الملف Employee و الكلاس Student.py الموجود في الملف Student هنا قمنا بتضمين الكلاس
from Employee import Employee
from Student import Student


# e إسمه Employee و كائن من الكلاس s إسمه Student هنا قمنا بإنشاء كائن من الكلاس
s = Student('Mhamad', 'Male', '1994', False, 'Computer Science')
e = Employee('Rana', 'Female', '1986', True, 1500)

# حتى تعرض قيمهم بشكل مرتب s و e الموجودة في كل من الكائن print_info() هنا قمنا باستدعاء الدالة
s.print_info()
e.print_info()
		

سنحصل على النتيجة التالية عند تشغيل الملف Test.

name: Mhamad
gender: Male
birthday: 1994
is married: False
specialization: Computer Science
-----------------------------
name: Rana
gender: Female
birthday: 1986
is married: True
salary: 1500
-----------------------------

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة