gpt4 book ai didi

Python - 什么时候需要 'import'?

转载 作者:太空狗 更新时间:2023-10-30 00:27:13 24 4
gpt4 key购买 nike

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++ 背景,感觉有必要在 show_answer 函数起作用之前导入包含 Universe 类定义的模块。 IE。一切都必须在使用之前声明。

我认为这没有必要是对的吗?这是鸭子打字,对吧?因此,如果不需要导入来查看类的方法,我至少需要它来访问类定义本身和模块的顶级函数?

在我编写的一个脚本中,我什至编写了一个基类来声明一个具有一组方法的接口(interface),然后派生具体类来继承该接口(interface),但我想我现在明白了 - 那是在 Python 中是错误的,在调用时会在运行时检查对象是否具有特定方法?

我意识到 Python 如此比 C++ 动态得多,我花了一段时间才看到您实际上需要编写的代码有多么少!

我想我知道这个问题的答案,但我只是想得到澄清并确保我在正确的轨道上。

更新:感谢所有的回答,我想我现在应该澄清我的问题:

mod2.show_answer() 是否需要导入(任何描述)才能知道该事物有一个名为 answer() 的方法,还是在运行时动态确定?

最佳答案

在这种情况下,您是对的:show_answer() 被赋予一个对象,它调用该对象的方法“answer”。只要给 show_answer() 的对象有这样的方法,对象从哪里来都无所谓。

但是,如果您想在 mod2 中创建 Universe 的实例,则必须导入 mod1,因为 Universe 不在 mod2 命名空间中,即使在 mod2 已被 mod1 导入之后也是如此。

关于Python - 什么时候需要 'import'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1027557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com