لماذا لا تكون جميع الأسماء في Dir (x) صالحة للوصول إلى السمات؟

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

سؤال

لماذا يقوم المبرمج بإدخال الأشياء __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__ يمكن استخدامها بدلاً من ذلك للإصدارات السابقة.

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