Skip to main content
 首页 » 编程设计

python之导入同名方法

2025年05月04日16linjiqin

所以我有两个单独的 Python 包,我正在将它们导入到我的 Raspberry Pi Python 脚本中。在这种情况下;

from rflib import* 
from Rpi.GPIO import* 

但是,这两个包都有自己独立的方法cleanup(self)

因此,在脚本末尾,当我使用命令时 cleanup(),我如何 a) 知道该方法来自哪个包(它们做完全不同的事情 b)控制运行哪个包?

我调查了类似命名的 questions , 但它似乎处理继承重载而不是包导入

请您参考如下方法:

from <module> import *获取模块中的所有名称(那些不以 _ 开头的名称或 <module>.__all__ 中列出的所有名称,并将这些名称分配为当前模块中的全局变量。

如果两个模块定义了相同的名称,则意味着最后一个以这种方式导入的模块获胜; cleanup = rflib.cleanup被 cleanup = Rpi.GPIO.cleanup 取代第二个from Rpi.GPIO import *声明。

您通常希望避免使用from <module> import * .导入特定名称,或仅导入模块本身。

在这种情况下,你可以这样做:

from rflib import cleanup as rflib_cleanup 
from Rpi.GPIO import cleanup as rpigpio_cleanup 

这会将这两个函数绑定(bind)为不同的名称。

或者您可以只导入模块:

import rflib 
from Rpi import GPIO 

它只给你 rflib和 GPIO名称,每个都是对模块对象的引用,所以现在您可以引用每个 cleanup作为这些模块的属性:

rflib.cleanup() 
GPIO.cleanup() 

如果您需要使用任一模块中的大量名称,则首选后一种样式,因为它限制了您需要执行的导入数量,保持您的命名空间干净整洁,并在这些名称的任何位置为您提供更多上下文在您的代码中使用。