我在某个文件里需要用到 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 201-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 ![]() 如果实际情况出现,只能说明项目的设计有问题,换任何语言都有问题。 |
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 ???? |