بايثونمثال يوضح الفائدة من تعريف كلاس مجرّد
في المثال التالي قمنا ببناء كلاس مجرّد إسمه Person
يحتوي على الدالة __init__()
التي وضعنا فيها 4 خصائص و هي name
، gender
، brithday
و is_married
، بالإضافة إلى دالة مجرّدة و فارغة إسمها print_info()
.
بعدها قمنا بتعريف كلاس إسمه Student
يرث من الكلاس Person
و يملك خاصية إضافية إسمها specialization
.
بعدها قمنا بتعريف كلاس إسمه Employee
يرث من الكلاس Person
و يملك خاصية إضافية إسمها salary
.
الفكرة هنا هي أن أي كلاس سيتم إنشاؤه لتمثيل إنسان يجب أن يرث من الكلاس Person
الذي يملك الخصائص المشتركة لكل البشر و يجب أن يفعل Override للدالة print_info()
حتى تعرض كل قيم الخصائص الموجودة في الكلاس الذي ورثها بشكل مرتب.
في الأخير قمنا بإنشاء كائن من الكلاس Student
و كائن من الكلاس Employee
و إستدعاء الدالة print_info()
من كل واحد منهما.
مثال
# حتى نستطيع استخدامهما 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 هذه الدالة يجب أن يفعل لها def print_info(self): pass
# حتى نستطيع الوراثة منه 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('-----------------------------')
# حتى نستطيع الوراثة منه 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('-----------------------------')
# حتى نستطيع إنشاء كائنات منهما 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
.
gender: Male
birthday: 1994
is married: False
specialization: Computer Science
-----------------------------
name: Rana
gender: Female
birthday: 1986
is married: True
salary: 1500
-----------------------------