Как Python может вызвать класс, который никогда не определяется в коде? - PullRequest
0 голосов
/ 31 августа 2009

Я не знаю, выполнимо ли здесь вставить весь код, но я смотрю на код в этом репозитории git .

Если вы посмотрите на пример, который они делают:

ec2 = EC2('access key id', 'secret key')

... но нет класса EC2. Тем не менее, похоже, что в libcloud\providers.py есть диктат, который отображает EC2 на EC2NodeDriver, найденный в libcloud\drivers\ec2.py. Правильное отображение рассчитывается по get_driver(provider), но этот метод, похоже, нигде не вызывается.

Я новичок в python, очевидно, но не в программировании. Я даже не уверен, что я должен искать в документах, чтобы понять это.

Ответы [ 2 ]

5 голосов
/ 31 августа 2009

example.py включает в себя оператор import, который гласит:

from libcloud.drivers import EC2, Slicehost, Rackspace

Это означает, что класс EC2 импортирован из модуля libcloud.drivers. Однако в этом случае libcloud.drivers на самом деле является пакетом (пакет Python содержит модулей ), что означает, что EC2 должен быть определен в файл __init__.py в libcloud/drivers/, но это не так. Это означает, что в данном конкретном случае их пример кода на самом деле неверен. (Я скачал код и получил ошибку импорта при запуске example.py, и, как вы можете видеть, файл libcloud/drivers/__init__.py вообще не содержит никаких определений, в первую очередь определения EC2.)

0 голосов
/ 31 августа 2009

Изучение libcloud \ examples.py может быть полезным. Я видел это:

from libcloud.drivers import EC2, Slicehost, Rackspace

Оператор python 'import' возвращает класс из другого модуля python, в данном случае из модуля libcloud.drivers.

...