Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

في المثال التالي قمنا ببناء كلاس مجرّد إسمه 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
-----------------------------