我在某个文件里需要用到 contract.serializers.contract_serializers 里的 PurchaseSerializer
那么我有两种写法:
import contract.serializers.contract_serializers
a = contract.serializers.contract_serializers.PurchaseSerializer(instance)
这一种层级太长了,写起来很不方便
from contract.serializers.contract_serializers import PurchaseSerializer
a = PurchaseSerializer(instance)
这一种写法看着很好
但是我有个疑问是:在[编写高质量代码:改善 Python 程序的 91 个建议](编写高质量代码:改善 Python 程序的 91 个建议)这本书里,提到了:要有节制的使用from ... import ...
而且如果两个文件有相互导入,使用from ... import ...
大概率会报import error
的错
那么应该怎么导入呢?
我的总结是
from...import...
from...import...
放在函数里 1
wizardforcel 2018-04-12 15:03:03 +08:00 via Android
为啥要相互导入。。
你见过哪个语言允许相互导入? |
2
yeyuexia 2018-04-12 15:04:14 +08:00
好几个月没写 python 了,现在如果两个文件有相互导入 用 import 就不会报 import error 的错了????????????????
|
3
a33486 2018-04-12 15:05:05 +08:00
有种导入方法叫__important__("contract.serializers.contract_serializers").PurchaseSerializer 可以试一试 这种导入方法模块和函数全部要自己打比较麻烦 而且只能导入一次 我现在刚入门 在想这种导入方法跟 from important 之间的性能区别呢
|
4
takato 2018-04-12 15:09:44 +08:00
import contract.serializers.contract_serializers as ooxx
a = ooxx.PurchaseSerializer(instance) |
5
yeyuexia 2018-04-12 15:12:49 +08:00
233 刚才查了下 还真可以,我还真是太无知了哈哈哈
|
6
alvy OP @wizardforcel 相互导入是不对,但是实际情况的确会遇到
|
9
ipwx 2018-04-12 15:46:32 +08:00
在函数或者类成员函数里面导入,是可以突破循环导入的限制的。
|
10
bookding0 2018-04-12 15:49:19 +08:00
用 from xx import xx。
循环导入是另一个问题。 |
12
scriptB0y 2018-04-12 16:02:46 +08:00 1
如果实际情况出现,只能说明项目的设计有问题,换任何语言都有问题。
|
13
gnozix 2018-04-12 16:48:44 +08:00
import as 了解一下
|
15
wizardoz 2018-04-12 17:54:48 +08:00
用的地方再导入,就基本上不存在循环导入的问题。
|
18
Wicked 2018-04-12 23:12:30 +08:00 via iPhone
import as
|
19
wqzjk393 2018-04-13 01:46:10 +08:00 via iPhone
…刚好今天看 flask 讲到分文件导致的注册路由模块和主模块之间的循环导入,然后使用蓝本解决 23333
|
20
kysida 2018-04-13 10:45:23 +08:00
试试 import from as ????
|