Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals 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
# حتى نستطيع استخدامهما 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('-----------------------------')
# حتى نستطيع الوراثة منه 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('-----------------------------')
# حتى نستطيع الوراثة منه 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()
# حتى نستطيع إنشاء كائنات منهما 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
-----------------------------