mod1.py
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 ++, у меня было ощущение, что необходимо импортировать модуль, содержащий определение класса Universe, прежде чем будет работать функция show_answer. То есть все должно быть объявлено, прежде чем его можно будет использовать.
Правильно ли я считаю, что в этом нет необходимости? Это утка печатает, верно? Так что, если импорт не требуется для просмотра методов класса, я бы по крайней мере нуждался в нем для определения самого класса и функций верхнего уровня модуля?
В одном скрипте, который я написал, я даже дошел до написания базового класса для объявления интерфейса с набором методов, а затем получения конкретных классов для наследования этого интерфейса, но я думаю, что я понял это сейчас просто неправильно в Python, и проверяется ли у объекта определенный метод во время выполнения в момент, когда сделан вызов?
Я понимаю, что Python , поэтому гораздо более динамичен, чем C ++, мне потребовалось время, чтобы увидеть, как мало кода на самом деле нужно писать!
Мне кажется, я знаю ответ на этот вопрос, но я просто хотел получить разъяснения и убедиться, что я на правильном пути.
ОБНОВЛЕНИЕ: Спасибо за все ответы, я думаю, что я должен уточнить мой вопрос сейчас:
Нужен ли mod2.show_answer () импорт (любого описания), чтобы узнать, что у этого объекта есть метод answer (), или он определяется динамически во время выполнения?