لماذا لا تكون جميع الأسماء في Dir (x) صالحة للوصول إلى السمات؟
-
20-08-2019 - |
سؤال
لماذا يقوم المبرمج بإدخال الأشياء __dict__
لا يمكن استخدامها للوصول إلى السمات؟ على سبيل المثال ، في مثيل بلدي ، dir(portal)
يشمل index_html
, ، لكن portal.index_html
يرفع نمة. هذا صحيح أيضا ل __class__
سمة Products.ZCatalog.Catalog.mybrains
. هل هناك سبب وجيه لماذا dir()
لا يمكن الوثوق بها؟
بدس حول inspect
الوحدة النمطية ، أرى أنهم يستخدمون object.__dict__['x']
بدلاً من الوصول إلى السمة لهذا السبب ولأنهم لا يريدون التشغيل getattr
سحر.
المحلول
لا أعرف عن PLONE ، لذا فإن ما يلي عام.
من المستندات من dir
:
إذا كان للكائن طريقة مسماة
__dir__()
, ، سيتم استدعاء هذه الطريقة ويجب إرجاع قائمة السمات. هذا يسمح للكائنات التي تنفذ العرف__getattr__()
أو__getattribute__()
وظيفة لتخصيص الطريقdir()
تقارير سماتهم.
مجرد التخمين هنا ، لكن يمكنني التفكير في شيئين قد يحدثان-
الكائن لديه ملف
__dir__()
الطريقة التي تُرجع السمات التي لا تملكها(أقل احتمالا) الكائن لديها السمة التي تطلبها (أي أنها في
obj.__dict__
أوtype(obj).__dict__
, ، ولكن يتجاوز__getattr__
لكي ترجعAttributeError
تعديل: __dir__
يتم دعمه فقط في Python 2.6+ ، ومع ذلك فإن السمات الخاصة (المهملة) الخاصة __methods__
و __members__
يمكن استخدامها بدلاً من ذلك للإصدارات السابقة.