كيف يمكن للثعبان أن يطلق على فئة لا يتم تعريفها أبدًا في الكود؟
-
20-09-2019 - |
سؤال
لا أعرف ما إذا كان من الممكن لصق كل الكود هنا ولكني أنظر إلى الرمز في هذا غيت ريبو.
إذا نظرت إلى المثال الذي يفعلونه:
ec2 = EC2('access key id', 'secret key')
...ولكن لا يوجد EC2
صف دراسي. ومع ذلك ، يبدو في libcloud\providers.py
هناك قول EC2
إلى EC2NodeDriver
عثر عليه في libcloud\drivers\ec2.py
. يتم حساب التعيين الصحيح بواسطة get_driver(provider)
, ، ولكن لا يبدو أن هذه الطريقة تسمى في أي مكان.
أنا جديد على Python ، من الواضح ، ولكن ليس للبرمجة. لست متأكدًا مما يجب أن أبحث عنه في المستندات لمعرفة ذلك.
المحلول
example.py
يتضمن import
بيان يقرأ:
from libcloud.drivers import EC2, Slicehost, Rackspace
هذا يعني أن ال EC2
يتم استيراد الفصل من libcloud.drivers
وحدة. ومع ذلك ، في هذه الحالة ، libcloud.drivers
هو في الواقع أ صفقة (بيثون صفقة يحتوي على الوحدات النمطية)، مما يعنى EC2
يجب تعريفه في ملف __init__.py
في libcloud/drivers/
, ، لكنها ليست كذلك. مما يعني أنه في هذه الحالة المحددة ، فإن رمز المثال الخاص بهم خاطئ في الواقع. (قمت بتنزيل الكود وحصلت على خطأ في الاستيراد عند التشغيل example.py
, ، وكما ترون ، الملف libcloud/drivers/__init__.py
لا يحتوي على أي تعريفات على الإطلاق ، على الأقل EC2
تعريف.)
نصائح أخرى
قد يكون التحقق من أمثلة libcloud. أنا رأيت هذا:
from libcloud.drivers import EC2, Slicehost, Rackspace
يجلب بيان Python 'Import' الفصل من وحدة Python الأخرى ، في هذه الحالة من وحدة Libcloud.drivers.