导入同名方法
Importing identically named methods
所以我有两个单独的 Python 包,我正在将它们导入到 Raspberry Pi 的 Python 脚本中。在这种情况下为;
from rflib import*
from Rpi.GPIO import*
但是,这两个包都有自己独立的方法cleanup(self)
因此,在脚本末尾,当我使用命令时
cleanup()
,我如何 a) 知道该方法来自哪个包(它们都做完全不同的事情 b)控制哪个是 运行?
我研究了类似名称的 questions,但它似乎处理继承重载而不是包导入
将 *
与 import
一起使用不是一个好习惯。你应该做这样的事情:
import rflib
from Rpi import GPIO
# Clean Up 1
rflib.cleanup
#Clean Up 2
GPIO.cleanup()
补充资料:
如果您的 files/objects 同名,那么您应该使用 as
和 import
。例如:
from file1 import utils as file1_utils
from file2 import utils as file2_utils
file1_utils.my_func()
file2_utils.my_func()
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
这会将这两个函数绑定为不同的名称。
或者您可以只导入模块:
import rflib
from Rpi import GPIO
仅提供 rflib
和 GPIO
名称,每个名称都是对模块对象的引用,因此现在您可以将每个 cleanup
函数作为这些模块的属性进行引用:
rflib.cleanup()
GPIO.cleanup()
如果您需要使用任一模块中的大量名称,则首选后一种样式,因为它限制了您需要执行的导入次数,保持您的命名空间干净整洁,并在任何地方为您提供更多上下文这些名称在您的代码中使用。
所以我有两个单独的 Python 包,我正在将它们导入到 Raspberry Pi 的 Python 脚本中。在这种情况下为;
from rflib import*
from Rpi.GPIO import*
但是,这两个包都有自己独立的方法cleanup(self)
因此,在脚本末尾,当我使用命令时
cleanup()
,我如何 a) 知道该方法来自哪个包(它们都做完全不同的事情 b)控制哪个是 运行?
我研究了类似名称的 questions,但它似乎处理继承重载而不是包导入
将 *
与 import
一起使用不是一个好习惯。你应该做这样的事情:
import rflib
from Rpi import GPIO
# Clean Up 1
rflib.cleanup
#Clean Up 2
GPIO.cleanup()
补充资料:
如果您的 files/objects 同名,那么您应该使用 as
和 import
。例如:
from file1 import utils as file1_utils
from file2 import utils as file2_utils
file1_utils.my_func()
file2_utils.my_func()
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
这会将这两个函数绑定为不同的名称。
或者您可以只导入模块:
import rflib
from Rpi import GPIO
仅提供 rflib
和 GPIO
名称,每个名称都是对模块对象的引用,因此现在您可以将每个 cleanup
函数作为这些模块的属性进行引用:
rflib.cleanup()
GPIO.cleanup()
如果您需要使用任一模块中的大量名称,则首选后一种样式,因为它限制了您需要执行的导入次数,保持您的命名空间干净整洁,并在任何地方为您提供更多上下文这些名称在您的代码中使用。