عند استخدام التوريث في بيثون، فإن المتغيرات التي تعرف في الصنف الأساسي (الأب) يمكن الوصول إليها في الصنف الموروث (الابن). ومع ذلك، في الحالة التي واجهتها، يحدث خطأ لأنك تحاول الوصول إلى المتغير isFrozen
داخل الصنف الموروث layer
قبل أن يتم تعيينه. عندما تكون تعليمة print isFrozen
موجودة في الصنف layer
، يحاول بيثون البحث عن قيمة isFrozen
داخل الصنف layer
نفسه، ولكنه لا يجدها لأنها لم تتم تعيينها في هذا الصنف بعد.
بمجرد أن تعين قيمة isFrozen
في صنف layer
، سيكون بإمكانك الوصول إليها. على سبيل المثال، يمكنك تعيين قيمة افتراضية لـ isFrozen
في الصنف layer
لتتمكن من استخدامها:
-
تصميم واجهة مستخدم متناسقة في تطبيقات iOS10/03/2024
-
تصميم وتنسيق موقع الويب بشكل فعّال05/03/2024
-
تحديث تلقائي لعناصر قائمة ListBox في ASP.NET31/01/2024
pythonclass frozen(object) :
isFrozen = False
print 'In base'
class layer(frozen):
isFrozen = True
print isFrozen
بهذه الطريقة، يمكنك الوصول إلى isFrozen
داخل الصنف layer
واستخدامه بشكل صحيح.
المزيد من المعلومات
عند استخدام التوريث في بيثون، يتم إنشاء نسخة من الصنف الأساسي (الأب) في الصنف الموروث (الابن)، مما يعني أن الصنف الموروث يرث جميع المتغيرات والوظائف من الصنف الأساسي. ومع ذلك، يمكن تعديل قيم المتغيرات في الصنف الموروث دون أن يؤثر ذلك على الصنف الأساسي.
في الحالة التي ذكرتها، كان هناك خطأ في الاستخدام حيث حاولت الوصول إلى isFrozen
في الصنف الموروث قبل تعيين قيمته. بمجرد تعيين قيمة isFrozen
في الصنف الموروث، سيمكنك الوصول إليها بشكل صحيح.
علاوة على ذلك، يمكنك أيضًا استخدام دوال في الصنف الموروث للتعامل مع المتغيرات التي تم توريثها من الصنف الأساسي. على سبيل المثال:
pythonclass frozen(object):
isFrozen = False
def __init__(self):
print('In base')
def freeze(self):
self.isFrozen = True
class layer(frozen):
def __init__(self):
super().__init__() # يجب استدعاء __init__ من الصنف الأساسي لتنفيذه
self.freeze()
print(self.isFrozen)
layer_instance = layer() # سيتم تنفيذ الكود في __init__ لكل من الصنف الأساسي والصنف الموروث
في هذا المثال، يتم استخدام دالة freeze
التي تم تعريفها في الصنف الأساسي frozen
لتغيير قيمة isFrozen
في الصنف الموروث layer
.