如何在 python 中以正确的方式导入?

How to import the right way in python?

我正在学习python编程,我想了解一些信息。
我正在使用 OOP 开发一个小项目。这是项目结构的示例:

PROJECT_FOLDER  
    |__ main.py  
    |__ modules  
         |__ __init__.py  
         |__ Example.py  

要导入我的 classes(这里只有一个,但通常更多)我应该一个一个地导入每个文件还是在 [=40 中创建一个 "all" 规则=]文件?

这是我的想法:

# Example.py
class Example:
    def __init__(self):
        print('Hello from Example')

第一个想法:

# First version of __init__.py is an empty file
# First version of main.py
from modules.Example import Example

my_example = Example()

或者,第二个想法:

# Second version of __init__.py
__all__ = ['Example']
# Second version of main.py
from modules import *

my_example = Example.Example()

根据我在文档和此处阅读的内容,最好避免使用 import *,因为它可能会造成混淆。但是,如果我需要导入 56 个 classes,我应该在开始编码之前写 56 行来导入我的 classes 吗?而且,使用 import * 会迫使我写 my_example = Example.Example(),这并不漂亮,也可能令人困惑。

总而言之,用 class 名称(包括首字母大写)命名 class 文件是否更好?我了解到在 PHP 中这是一个很好的做法,但 python 似乎还有其他约定(例如蛇形盒),pylint 总是很乐意提醒我:)

感谢您的回答,祝您愉快!

According to what I read in the documentation and here, it's better avoiding the use of import * because it could be confusing.

这是事实。如果可以,请避免 import *

But, if I need to import 56 classes, should I write 56 lines to import my classes before starting coding?

是的。但是您预计使用 56 个文件有多少个 类?

And, using import * would force me to write my_example = Example.Example() which is not pretty and could be confusing too.

我想你的意思是不是使用import *,但是还有from module import names语法,所以你可以做from modules.example import Example,然后使用my_example = Example().

To conclude, is this better to name class files with the class names (including the capitalized first letter)? I learned that it was a good practice in PHP but python seems to have other convention (snake case for example) that pylint is always happy to remind me :)

按照惯例,模块是snake_case.py,类是PascalCase,变量和函数的名称是snake_case,常量是BIG_SNAKE_CASE

在 python 中导入时有一些通用约定。 import * 称为通配符导入,无论您使用哪种编程语言,最好避免使用通配符导入。如果你所有的 56 classes 都在一个文件中,你可以像 from my_file import class_1, class_2, ... 一样导入它。你可以使用括号使它更清晰,from my_file import (class_1, class_2, class_3, ...) 如果你的 classes 不在一个文件中将它们导入 init.py 然后你可以导入所有这些都在一行中,就像上面的例子一样。在 python 中导入的另一个约定是始终从导入标准库开始,然后是第三方包,最后是您自己的模块。例如

import sys

import requests

from my_package import some_thing

class in python 应该是 CamelCase 并且对于模块用下划线分隔单词。 from MyClassName import my_module