单个 python 文件中的多个 类 具有不同的依赖项

Multiple classes in a single python file with different dependencies

如果我们在单个 Python 文件中有多个 class,是否可以在这些 class 中独立导入模块或库?

我发现与 Java 不同,Python 没有建议在单个文件中分隔 class 的样式指南。即使 Python 模块也有多个 class;例如 calendar 模块在一个文件中有 10 个 classes (calendar module source code).

在我的场景中, 我有一个名为 planet.py 的 Python 文件。它有多个 classes。 classes 之一需要导入 pyttsx3 模块。然后它需要在使用它之前获得对 pyttsx3.Engine 实例的引用。目前我正在导入模块并在 class __init__ 方法中创建实例,如下所示。

class Animal:
    pass

class Speaker:    
    def __init__(self):        
        import pyttsx3
        self.engine = pyttsx3.init()
    def speak(self, text):
        self.engine.say(text)
        self.engine.runAndWait()

其他一些程序员建议我不要在函数中导入模块。他们说每次调用该函数时都会执行导入语句。

我不知道该怎么做。除了主要问题,在这种情况下应遵循的最佳做法是什么?

导入语句通常应位于 python 文件的顶部(约定​​)。根据惯例,您应该将具有 相似意图和要求 的 class 分组在一个文件中。当您导入库时,文件中的所有classes 都可以使用它们。如果某个 class 不需要类似的导入,或者需要导入很多其他 class 不需要的库,从技术上讲,它应该在不同的文件中,并且可以导入该文件并实例化。

函数中的导入语句不会造成任何伤害(如果重复 运行 则延迟时间非常短),但正如@Evert 所说,如果它们失败,可能会给用户体验带来痛苦.