如何在 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
我正在学习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