لماذا لا يمكنني الوصول إلى مثيل. __ class__ سمة في بيثون؟

StackOverflow https://stackoverflow.com/questions/2835558

  •  26-09-2019
  •  | 
  •  

سؤال

أنا جديد على Python ، وأنا أعلم أنني يجب أن أفتقد شيئًا بسيطًا جدًا ، لكن لماذا لا يعمل هذا الكود البسيط للغاية؟

class myClass:
    pass

testObject = myClass
print testObject.__class__

أحصل على الخطأ التالية:

AttributeError: class myClass has no attribute '__class__'

لا يوجد كل كائن في بيثون __class__ ينسب؟

هل كانت مفيدة؟

المحلول

أعتقد أنني أدركت خطأي. اعتقدت أن الرمز testObject = myClass كان إنشاء مثيل/كائن جديد للفئة ، لكنه كان في الواقع تعيين إشارة إلى الفئة نفسها. لقد غيرت الرمز إلى:

class myClass: 
    pass 

testObject = myClass() 
print testObject.__class__ 

وهو يعمل الآن كما كنت أتوقع

نصائح أخرى

معظم ، ولكن ليس كل شيء ، لديها الكائنات في بيثون __class__ ينسب. يمكنك عادة الوصول إليه لتحديد فئة الكائن.

يمكنك الحصول على فئة من أي كائن عن طريق الاتصال type عليه.

>>> class myClass:
...     pass
... 
>>> testObject = myClass
>>> type(testObject)
<type 'classobj'>

الطبقات الطراز القديمة ليس لها ملف __class__ ينسب.

class myClass(object):
    pass
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top