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

Multiple classes in a single python file with different dependencies

如果在一个python文件中有多个类,是否可以在这些类中独立地导入模块或库?

我发现不像Python,Python没有样式指南,它建议在单个文件中分离类。即使是python模块也有多个类;例如,calendar模块在一个文件中也有10个类(日历模块源代码)。

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

1
2
3
4
5
6
7
8
9
10
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()

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

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


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

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