Python Practices of Classes
Python Practices of Classes
لنفترض أننا نريد إنشاء برنامج الهدف منه تخزين مجموعة كتب و من ثم عرضها بشكل مرتب.
البيانات التي نريد تخزينها هي التالية:
المؤلفين :بيانات كل مؤلف ستتضمن (رقم تعرفة ,اإلسم الكامل ,الهاتف ,البريد اإللكتروني).
الكتب :بيانات كل كتاب ستتضمن (رقم تعرفة ,العنوان ,تاريخ النشر ,رقم اإلصدار ,مؤلف الكتاب).
مالحظة :رقم التعرفة لكل من المؤلفين و الكتب يجب أن يتم إعطاؤه لهم بشكل تلقائي.
قم بتحويل الرسم إلى كود .ثم قم بإنشاء مجموعة كتب و مؤلفين .و قم بتجربة جميع الدوال في البرنامج.
Author.py
هنا قمنا بتعريف الكالس Authorو الذي سيحتوي على جميع الخصائص التي سيمكلها أي مؤلف #
class Author:
المتغير idIncrementerبتعريفه هنا و هكذا ليكون موحد بالنسبة لجميع الكائنات التي ننشئها من هذا الكالس #
__id_incrementer = 0
هنا قمنا بتعريف الخصائص األساسية التي يجب أن يملكها المؤلف و التي يمكننا تحديد قيمها عند إنشاء كائن من هذا الكالس #
الحظ أننا قمنا بجعل قيمة idIncrementerتزيد 1في كل مرة و من ثم يتم وضعها في الخاصية idالخاسة بالكائن #
القيم األخرى التي يتم تمريرها للكائن سيتم تخزينها كما هي #
def __init__(self, name, phone, email):
Author.__id_incrementer += 1
self.id = Author.__id_incrementer
self.name = name
self.phone = phone
self.email = email
Book.py
هنا قمنا بتعريف الكالس Bookو الذي سيحتوي على جميع الخصائص التي سيمكلها أي كتاب #
class Book:
المتغير idIncrementerبتعريفه هنا و هكذا ليكون موحد بالنسبة لجميع الكائنات التي ننشئها من هذا الكالس #
__id_incrementer = 0
هنا قمنا بتعريف الخصائص األساسية التي يجب أن يملكها المؤلف و التي يمكننا تحديد قيمها عند إنشاء كائن من هذا الكالس #
الحظ أننا قمنا بجعل قيمة idIncrementerتزيد 1في كل مرة و من ثم يتم وضعها في الخاصية idالخاسة بالكائن #
القيم األخرى التي يتم تمريرها للكائن سيتم تخزينها كما هي #
def __init__(self, title, publishing_date, version, author):
Book.__id_incrementer += 1
self.id = Book.__id_incrementer
self.title = title
self.publishing_date = publishing_date
self.version = version
self.author = author
Library.py
هنا قمنا بتعريف الكالس Libraryيمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم #
class Library:
المصفوفة authorsسنضع فيها كل معلومات المؤلفين ,و المصفوفة booksسنضع فيها كل معلومات الكتب #
][ = authors
][ = books
الدالة )( add_authorيمكن استخدامها إلضافة كائن من الكالس Authorبداخل المصفوفة # authors
def add_author(self, author):
)self.authors.append(author
يمكن استخدامها إللغاء كائن من الكالس Authorموضوع بداخل المصفوفة authorsباإلعتماد على رقم الـ idالخاص به #
الدالة )(remove_author
def remove_author(self, id):
بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل authorsو كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن # author
المصفوفة
for author in self.authors:
في حال كان الكائن authorيملك نفس رقم الـ idالذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة #
if author.id == id:
)self.authors.remove(author
return
في حال لم يتم إيجاد أي كائن في المصفوفة authorsيملك نفس رقم الـ idالذي تم تمريره للدالة سيتم طباعة الجملة التالية #
)"!print("Author with id", id, "is not found
)"print("----------------------
يمكن استخدامها لطباعة كل المعلومات المتوفرة حول مؤلف موضوع بداخل المصفوفة authorsباإلعتماد على رقم الـ idالخاص به #
الدالة )(print_author
def print_author(self, id):
بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل authorsو كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن # author
المصفوفة
for author in self.authors:
في حال كان الكائن authorيملك نفس رقم الـ idالذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة #
if author.id == id:
)"print("Author with id", id, "info.
)print("Name:", author.name
)print("Phone:", author.phone
)print("Email", author.email
)"print("----------------------
return
في حال لم يتم إيجاد أي كائن في المصفوفة authorsيملك نفس رقم الـ idالذي تم تمريره للدالة سيتم طباعة الجملة التالية #
)"!print("Author with id", id, "is not found
)"print("----------------------
يمكن استخدامها لطباعة كل أسماء الكتب التي قام بتأليفها مؤلف موضوع بداخل المصفوفة authorsباإلعتماد على رقم الـ idالخاص به #
الدالة )(print_author_books
def print_author_books(self, id):
سنستخدم المتغير isAuthorExistبهدف التأكد ما إن كان يوجد كاتب في المصفوفة authorsيملك رقم الـ idالذي تم تمريره للدالة #
ألنه إن لم يكن هناك كاتب أصالً فلن نقوم بالبحث عن كتب في المصفوفة booksمن إعداد هذا الكاتب ألن ذلك سيكون غير منطقي #
is_author_exist = False
"" = author_name
هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة authorsو كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن # author
for author in self.authors:
في حال كان الكائن authorيملك نفس رقم الـ idالذي مررناه للدالة سيتم تخزين إسم المؤلف في المتغير # authorName
و من ثم تغيير قيمة isAuthorExistإلى trueو إيقاف الحلقة ألننا تأكدنا أن هذا المؤلف موجود في المصفوفة # authors
if author.id == id:
is_author_exist = True
author_name = author.name
break
في حال بقيت قيمة isAuthorExistتساوي falseفهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة # authors
يملك نفس رقم الـ idالذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة #
if not is_author_exist:
)"!print("Author with id", id, "is not found
)"print("----------------------
return
هنا سيتم طباعة إسم المؤلف #
)"print("Books of author " + author_name + ":
هنا سنمر على جميع الكائنات المخزنة بداخل booksو كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن # book
المصفوفة
for book in self.books:
في حال كان الكائن ( authorأي المؤلف ) الموضوع في الكائن bookيملك نفس رقم الـ idالذي تم تمريره #
للدالة فهذا يعني أنه هو مؤلف الكتاب الحالي المخزن في الكائن bookو بالتالي سيتم طباعة إسم هذا الكتاب #
if book.author.id == id:
)print("- " + book.title
)"print("----------------------
الدالة )( add_bookيمكن استخدامها إلضافة كائن من الكالس Bookبداخل المصفوفة # books
def add_book(self, book):
)self.books.append(book
)( remove_bookيمكن استخدامها إللغاء كائن من الكالس Bookموضوع بداخل المصفوفة booksباإلعتماد على رقم الـ idالخاص به #
الدالة
def remove_book(self, id):
بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة booksو كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن # book
for book in self.books:
في حال كان الكائن bookيملك نفس رقم الـ idالذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة #
if book.id == id:
)self.books.remove(book
return
في حال لم يتم إيجاد أي كائن في المصفوفة booksيملك نفس رقم الـ idالذي تم تمريره للدالة سيتم طباعة الجملة التالية #
)"!print("Book with id", id, "is not found
)"print("----------------------
يمكن استخدامها لطباعة كل المعلومات المتوفرة حول كتاب موضوع بداخل المصفوفة booksباإلعتماد على رقم الـ idالخاص به #
الدالة )(print_book
def print_book(self, id):
بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة booksو كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن # book
for book in self.books:
في حال كان الكائن bookيملك نفس رقم الـ idالذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة #
if book.id == id:
)"print("Book with id", id, " info.
)print("Title:", book.title
)print("Publishing date:", book.publishing_date
)print("Author:", book.author.name
)"print("----------------------
return
في حال لم يتم إيجاد أي كائن في المصفوفة booksيملك نفس رقم الـ idالذي تم تمريره للدالة سيتم طباعة الجملة التالية #
)"!print("Book with id", id, "is not found
("print)"----------------------
Main.py
Authorأي كأننا قمنا بإنشاء 3مؤلفين # هنا قمنا بإنشاء 3كائنات من الكالس
author1 = Author("Mhamad", )""+96170123456", "[email protected]
author2 = Author("Salem", )""+9664021833", "[email protected]
author3 = Author("Rola", )""+9631249392", "[email protected]
هنا قمنا بإنشاء 4كائنات من الكالس Bookأي كأننا قمنا بإنشاء 4كتب #
الحظ أننا وضعنا الثالث مؤلفين بداخل الكتب التي أنشأناها .و الحظ أن الكائن author1وضعناه لكائنين من الكالس # Book
إذا ً المؤلف الذي يمثله الكائن author1يعتبر مؤلف الكتابين اللذين يمثلهما الكائنين book1و # book2
)book1 = Book("Learn Java", "12-20-2019", 1, author1
)book2 = Book("Learn HTML", "8-5-2018", 3, author1
)book3 = Book("PHP for beginners", "10-2-2019", 1, author2
)book4 = Book("C# for dummies", "12-20-2019", 1, author3
هنا قمنا بإنشاء كائن من الكالس Libraryألننا نريد تخزين الكتب و المؤلفين بشكل مرتب بداخله #
)(library = Library
هنا قمنا بإضافة المؤلفين في المصفوفة authorsالتي يمكلها الكائن libraryبواسطة الدالة )(# add_author
)library.add_author(author1
)library.add_author(author2
)library.add_author(author3
هنا قمنا بإضافة الكتب في المصفوفة booksالتي يمكلها الكائن libraryبواسطة الدالة )(# add_book
)library.add_book(book1
)library.add_book(book2
)library.add_book(book3
)library.add_book(book4
هنا قمنا بطباعة معلومات كل المؤلفين باإلعتماد على رقم التعرفة idالخاص بهم و بواسطة الدالة )(# print_author
تذكر :رقم التعرفة الخاص بكل مؤلف تم إنشاؤه بشكل تلقائي عند إنشاء كل مؤلف بداخل الكونستركتور #
)library.print_author(1
)library.print_author(2
)library.print_author(3
هنا قمنا بطباعة معلومات كل الكتب باإلعتماد على رقم التعرفة idالخاص بهم و بواسطة الدالة )(# print_book
تذكر :رقم التعرفة الخاص بكل كتاب تم إنشاؤه بشكل تلقائي عند إنشاء كل كتاب بداخل الكونستركتور #
)library.print_book(1
)library.print_book(2
)library.print_book(3
)library.print_book(4
هنا قمنا بطباعة الكتب التي يملكها كل مؤلف باإلعتماد على رقم التعرفة idالخاص بهم و بواسطة الدالة )(# print_author_books
)library.print_author_books(1
)library.print_author_books(2
)library.print_author_books(3
هنا قمنا بحذف المؤلف الذي يملك رقم التعرفة 2بواسطة الدالة )(# remove_author
بعدها حاولنا طباعة معلوماته و الكتب التي قام بتأليفها بواسطة الدالة )( print_authorو )(# print_author_books
الحظ أنه لم يحدث أي خطأ عند محاولة طباعة معلومات مؤلف لم يعد موجودا ً ألن الدوال مصممة للتأكد قبل المحاولة الحذف #
)library.remove_author(2
)library.print_author(2
(library.print_author_books)2
.سنحصل على النتيجة التالية عند التشغيل
Author with id 1 info. --> 35 الموضوعة في السطرprint_author() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mhamad
Phone: +96170123456
Email: [email protected]
----------------------
Author with id 2 info. --> 36 الموضوعة في السطرprint_author() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Salem
Phone: +9664021833
Email: [email protected]
---------------------- --> 37 الموضوعة في السطرprint_author() تم عرض هذا المحتوى بسبب استدعاء الدالة
Author with id 3 info.
Name: Rola
Phone: +9631249392
Email: [email protected]
----------------------
Book with id 1 info. --> 41 الموضوعة في السطرprint_book() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: Learn Java
Version: 1
Publishing date: 12-20-2019
author in Mhamad
----------------------
Book with id 2 info. --> 42 الموضوعة في السطرprint_book() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: Learn HTML
Version: 3
Publishing date: 8-5-2018
author in Mhamad
----------------------
Book with id 3 info. --> 43 الموضوعة في السطرprint_book() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: PHP for beginners
Version: 1
Publishing date: 10-2-2019
author in Salem
----------------------
Book with id 4 info. --> 44 الموضوعة في السطرprint_book() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: C# for dummies
Version: 1
Publishing date: 12-20-2019
author in Rola
----------------------
Books of author Mhamad: --> 47 الموضوعة في السطرprint_author_books() تم عرض هذا المحتوى بسبب استدعاء الدالة
- Learn Java
- Learn HTML
----------------------
Books of author Salem: --> 48 الموضوعة في السطرprint_author_books() تم عرض هذا المحتوى بسبب استدعاء الدالة
- PHP for beginners
----------------------
Books of author Rola: --> 49 الموضوعة في السطرprint_author_books() تم عرض هذا المحتوى بسبب استدعاء الدالة
- C# for dummies
----------------------
Author with id 2 is not found! --> 55 الموضوعة في السطرprint_author() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------
Author with id 2 is not found! --> 56 الموضوعة في السطرprint_author_books() تم عرض هذا المحتوى بسبب استدعاء الدالة