متغيرات الـ Instance مقابل متغيرات الـ Class
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 13 من 64.
تعد متغيرات المثيل (Instance variables) فريدة لكل كائن، بينما تشترك جميع كائنات الفئة نفسها في متغيرات الفئة (class variables).
إليك مثال على فئة (class) تحتوي على كلا النوعين من المتغيرات
class Student:
# متغير الفئة - مشترك بين جميع المثيلات
school = "Python High School"
def __init__(self, name, grade):
# متغيرات المثيل - فريدة لكل طالب
self.name = name
self.grade = gradeإنشاء كائنات الطلاب:
alice = Student("Alice", "A")
bob = Student("Bob", "B")الوصول إلى متغيرات المثيل (الفريدة لكل كائن):
print(alice.name) # أليس
print(bob.name) # بوب
print(alice.grade) # A
print(bob.grade) # Bالوصول إلى متغيرات الفئة (المشتركة بين جميع الكائنات):
print(alice.school) # مدرسة بايثون الثانوية
print(bob.school) # مدرسة بايثون الثانوية
print(Student.school) # مدرسة بايثون الثانويةالآن قم بتغيير متغير الفئة:
Student.school = "Python Academy"تحقق من كيفية تأثير التغيير على جميع المثيلات:
print(alice.school) # أكاديمية بايثون
print(bob.school) # أكاديمية بايثونالمخرجات:
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academyيمكنك أيضاً إنشاء متغيرات النسخة (instance variables) بعد إنشاء الكائن:
alice.age = 16 # هذا ينشئ متغير نسخة
print(alice.age) # 16
# print(bob.age) # سيؤدي هذا إلى حدوث خطأ - bob ليس لديه ageالفرق الرئيسي: متغيرات النسخة (التي يتم إنشاؤها باستخدام self.variable_name) فريدة لكل كائن، بينما متغيرات الفئة (المعرفة مباشرة داخل الفئة) تتم مشاركتها بواسطة جميع الكائنات. تغيير متغير الفئة يؤثر على جميع النسخ.
التحدي
سهلأكمل نظاماً مصرفياً.. ستقوم بتعريف فئة BankAccount في ملف واحد واستخدامها في ملف آخر.
ستعمل مع:
bank_account.py: قم بتعريف فئةBankAccountمع السمات والأساليبdriver.py: استيراد الفئة، وإنشاء الحسابات، وتوضيح متغيرات الفئة
اتبع تعليقات TODO في كلا الملفين للحصول على تعليمات خطوة بخطوة. ستوجهك التعليقات خلال إنشاء الفئة بالمتغيرات والأساليب المناسبة، وتوضيح كيفية تأثير متغيرات الفئة على جميع المثيلات.
ورقة مرجعية
متغيرات المثيل (Instance variables) فريدة لكل كائن، بينما متغيرات الفئة (class variables) مشتركة بين جميع كائنات نفس الفئة.
فئة تحتوي على كلا نوعي المتغيرات:
class Student:
# متغير الفئة - مشترك بين جميع المثيلات
school = "Python High School"
def __init__(self, name, grade):
# متغيرات المثيل - فريدة لكل طالب
self.name = name
self.grade = gradeالوصول إلى متغيرات المثيل (فريدة لكل كائن):
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # Bobالوصول إلى متغيرات الفئة (مشتركة بين جميع الكائنات):
print(alice.school) # Python High School
print(bob.school) # Python High School
print(Student.school) # Python High Schoolتغيير متغيرات الفئة يؤثر على جميع المثيلات:
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python Academyإنشاء متغيرات مثيل بعد إنشاء الكائن:
alice.age = 16 # هذا ينشئ متغير مثيل
print(alice.age) # 16جرّب بنفسك
# TODO: استيراد فئة BankAccount من bank_account.py
from bank_account import BankAccount
# TODO: إنشاء حسابين بهذه التفاصيل الدقيقة:
# - account1: صاحب الحساب "Alice Smith" برصيد 1000 دولار
# - account2: صاحب الحساب "Bob Jones" برصيد 2000 دولار
# TODO: استدعاء display_info() لكلا الحسابين
# TODO: تغيير متغير الفئة interest_rate إلى 0.03 (3%)
# استخدم هذا التنسيق: BankAccount.interest_rate = 0.03
# TODO: طباعة النص "After interest rate change:"
# TODO: استدعاء display_info() لكلا الحسابين مرة أخرى لإظهار أن كليهما لديهما معدل الفائدة الجديديتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال3خصائص الـ Class
متغيرات الـ Instance مقابل متغيرات الـ ClassProperty Decoratorsالسمات الخاصةمراجعة - مدير الحساب البنكي