导入具有相同名称的方法

时间:2016-10-17 12:47:15

标签: python python-import

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

from rflib import*
from Rpi.GPIO import*

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

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

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

2 个答案:

答案 0 :(得分:5)

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

如果两个模块定义了相同的名称,那意味着以这种方式导入的最后一个模块获胜; cleanup = rflib.cleanup被第cleanup = Rpi.GPIO.cleanupfrom Rpi.GPIO import *替换为from <module> import *

您通常希望避免使用from rflib import cleanup as rflib_cleanup from Rpi.GPIO import cleanup as rpigpio_cleanup 。导入特定名称,或仅导入模块本身。

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

import rflib
from Rpi import GPIO

将这两个函数绑定为不同的名称。

或者您可以导入模块:

rflib

只提供GPIOcleanup个名称,每个名称都是对模块对象的引用,所以现在您可以将每个rflib.cleanup() GPIO.cleanup() 函数作为这些模块的属性引用:< / p>

Magic

如果您需要使用来自任一模块的大量名称,则首选后一种样式,因为这会限制您需要执行的导入次数,使您的名称空间保持干净且不混乱,并为这些名称提供更多上下文在你的代码中使用。

答案 1 :(得分:2)

*import一起使用并不是一个好习惯。你应该做的事情如下:

import rflib
from Rpi import GPIO

# Clean Up 1
rflib.cleanup

#Clean Up 2
GPIO.cleanup()

其他信息:

如果您的文件/对象名称相同,那么您应该as使用import。例如:

   from file1 import utils as file1_utils
   from file2 import utils as file2_utils

   file1_utils.my_func()
   file2_utils.my_func()