0% found this document useful (0 votes)
7 views8 pages

Python Practices of Classes

Uploaded by

ritajhmz
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views8 pages

Python Practices of Classes

Uploaded by

ritajhmz
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

‫فكرة المشروع‬

‫لنفترض أننا نريد إنشاء برنامج الهدف منه تخزين مجموعة كتب و من ثم عرضها بشكل مرتب‪.‬‬
‫البيانات التي نريد تخزينها هي التالية‪:‬‬

‫المؤلفين‪ :‬بيانات كل مؤلف ستتضمن (رقم تعرفة‪ ,‬اإلسم الكامل‪ ,‬الهاتف‪ ,‬البريد اإللكتروني)‪.‬‬
‫الكتب‪ :‬بيانات كل كتاب ستتضمن (رقم تعرفة‪ ,‬العنوان‪ ,‬تاريخ النشر‪ ,‬رقم اإلصدار‪ ,‬مؤلف الكتاب)‪.‬‬

‫مالحظة‪ :‬رقم التعرفة لكل من المؤلفين و الكتب يجب أن يتم إعطاؤه لهم بشكل تلقائي‪.‬‬

‫الشكل العام ألقسام المشروع‬

‫شرح أقسام المشروع‬


‫‪Author‬‬
‫يمثل أي مؤلف يتم إنشاؤه‪.‬‬
‫‪Book‬‬
‫يمثل أي كتاب يتم إنشاؤه‪.‬‬
‫‪Library‬‬
‫سيحتوي على كل المؤلفين و الكتب و الدوال التي تسمح بإضافة و حذف مؤلف و كتب‪.‬‬
‫)(‪add_author‬‬
‫‪:‬مهمتها إضافة مؤلف جديد‪.‬‬
‫)(‪remove_author‬‬
‫‪:‬مهمتها حذف مؤلف من خالل ‪ id‬المؤلف الذي نمرره لها عند استدعائها‪.‬‬
‫)(‪print_author‬‬
‫‪:‬مهمتها عرض كل معلومات المؤلف من خالل ‪ id‬المؤلف الذي نمرره لها عند استدعائها‪.‬‬
‫)(‪print_author_books‬‬
‫‪:‬مهمتها عرض إسم المؤلف و أسماء كتبه من خالل ‪ id‬المؤلف الذي نمرره لها عند استدعائها‪.‬‬
‫)(‪add_book‬‬
‫‪:‬مهمتها إضافة كتاب جديد‪.‬‬
‫)(‪remove_book‬‬
‫‪:‬مهمتها حذف كتاب من خالل ‪ id‬الكتاب الذي نمرره لها عند استدعائها‪.‬‬
‫)(‪print_book‬‬
‫‪:‬مهمتها عرض كل معلومات الكتاب و إسم مؤلفه من خالل ‪ id‬الكتاب الذي نمرره لها عند استدعائها‪.‬‬

‫قم بتحويل الرسم إلى كود‪ .‬ثم قم بإنشاء مجموعة كتب و مؤلفين‪ .‬و قم بتجربة جميع الدوال في البرنامج‪.‬‬

‫‪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‬‬

‫‪from Author import Author‬‬


‫‪from Book import Book‬‬
‫‪from Library import Library‬‬

‫‪ 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() ‫تم عرض هذا المحتوى بسبب استدعاء الدالة‬

You might also like