从模块导入多个类的两种常见方式
from module_name import Class1, Class2
这种方式直接从指定模块中导入所需的类。在代码中使用这些类时,直接使用类名即可,无需前缀。例如:
from math import sin, cos
print(sin(0))
print(cos(0))
import module_name
然后 module_name.Class1
这种方式是导入整个模块,然后通过模块名作为前缀来访问模块中的类。例如:
import math
print(math.sin(0))
print(math.cos(0))
两种方式在使用场景、命名空间等方面的区别
- 使用场景
from module_name import Class1, Class2
:适用于明确知道仅需要模块中的特定几个类,且希望代码中使用类名时更简洁,不需要每次都加上模块前缀的场景。例如在开发图形处理程序时,若只需要tkinter
模块中的Button
和Label
类,就可以使用这种导入方式。
import module_name
然后 module_name.Class1
:当需要使用模块中的多个类、函数以及其他资源,并且希望明确知道类或函数的来源时,这种方式更合适。同时,如果担心不同模块中类名冲突,使用模块前缀可以有效避免。例如在使用numpy
进行数值计算时,通常导入整个numpy
模块,因为会频繁使用其众多的函数和类,如numpy.array
、numpy.sum
等。
- 命名空间
from module_name import Class1, Class2
:将导入的类直接引入当前命名空间。如果当前命名空间中已有同名的类或变量,可能会发生命名冲突。例如,若当前代码中已经定义了一个名为sin
的函数,再使用from math import sin
,就会覆盖原有的sin
函数。
import module_name
然后 module_name.Class1
:模块中的类在模块自身的命名空间内,不会与当前命名空间直接冲突。通过模块前缀访问类,使得命名空间更加清晰,每个模块的功能和类都有明确的所属。例如,即使当前命名空间中有自己定义的sin
函数,使用math.sin
依然是访问math
模块中的正弦函数。