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

单个python文件中的多个类具有不同的依赖关系,python,python-3.x,libraries,python-import,python-3.6,Python,Python 3.x,Libraries,Python Import,Python 3.6,如果在一个Python文件中有多个类,是否可以在这些类中独立导入模块或库? 我发现,与Java不同,Python没有建议在单个文件中分离类的样式指南。甚至Python模块也有多个类;例如,calendar模块在一个文件中有10个类() 在我的场景中, 我有一个名为planet.py的Python文件。它有多个类。其中一个类需要导入pyttsx3模块。然后在使用它之前,它需要获得对pyttsx3.Engine实例的引用。目前,我正在导入模块并在类\uuuu init\uuu方法中创建实例,如下所示

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

我发现,与Java不同,Python没有建议在单个文件中分离类的样式指南。甚至Python模块也有多个类;例如,
calendar
模块在一个文件中有10个类()

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

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语句


我不知道怎么做。除了主要问题外,在类似这样的场景中,最佳实践是什么?

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


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

Python模块不会多次导入。该语句可能会执行多次,但一旦Python看到模块已经加载,它就会被删除。这种开销是最小的。请参见示例。您不将此类划分为其自己的模块的任何原因,在该模块的顶部导入
pyttsx3
?将导入放在模块顶部的原因有两个(afaik):1/人们可以立即看到所需的模块,2/导入发生得很早,因此失败的导入会提前出现。函数内部的导入可能会在代码运行了2小时后调用,例如,2小时(如果当时只调用该函数),如果导入失败,则对用户来说有点苛刻。很高兴在
import
语句中了解到一些新内容。关于在文件顶部导入模块,您是对的。这只是一个场景。我迫切想知道的是
如果我们在一个Python文件中有多个类,如何在这些类中独立导入其他模块?
你不知道:如果你在一个文件中有多个类,它们可能是相关的,导入可能与所有这些类都相关。