mod1.pyPython - когда требуется «импорт»?
import mod2
class Universe:
def __init__(self):
pass
def answer(self):
return 42
u = Universe()
mod2.show_answer(u)
mod2.py
#import mod1 -- not necessary
def show_answer(thing):
print thing.answer()
Исходя из C++ фона у меня было чувство, что это было необходимо импортировать модуль, содержащий определение класса Вселенной, прежде чем функция show_answer будет работать. То есть все должно было быть объявлено до того, как оно может быть использовано.
Я прав, думая, что это не нужно? Это утка, правда? Итак, если импорт не требуется для просмотра методов класса, я бы, по крайней мере, нуждался в нем для определения класса и функций верхнего уровня модуля?
В одном сценарии, который я написал, я даже зашел так далеко, как писал базовый класс, чтобы объявить интерфейс с набором методов, а затем вывел конкретные классы для наследования этого интерфейса, но я думаю, что теперь получаю его - это просто неправильно в Python и проверяется ли объект определенным методом во время выполнения в точке, где выполняется вызов?
Я понимаю, что Python так гораздо более динамичный, чем C++, мне потребовалось некоторое время, чтобы увидеть, как мало кода вам действительно нужно писать!
Я думаю, что знаю ответ на этот вопрос, но я просто хотел получить разъяснения и убедиться, что я на правильном пути.
UPDATE: Спасибо за ответы на все вопросы, я думаю, что я должен прояснить мой вопрос сейчас:
ли mod2.show_answer() нужен импорт (любого описания), чтобы знать, что вещь имеет метод, называемый ответ() , или это определяется динамически во время выполнения?
Чтобы ответить вам второй вопрос: нет, это динамическое. Он смотрит в вещь .__ dict__ для записи «ответа». Grep для «экземпляров класса» по адресу http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy – NicDumZ