由 python 自定义 class 引发的两个问题

由 python 自定义 class 引发的两个问题


1. 循环 import 

今天用 python 写着玩,自定义了一个class A, 放在 A.py 里, 遇到了个问题, 就是  这个 class A 在有些文件里面可以正常  import 到,在有些类里面 import 这个类,无论写成什么样,都会出现 ImportError.

后来发现,出现 ImportError 的文件, 出现了 循环import 的现象。 类似  c++ 里面的  头文件重复 include ,在这里的情况是, A.py import 了 B.py ,B.py import C.py, C.py import A.py 时, 就会出现 ImportError.

由于 Python 没有类似 c++ 的编译时  #ifndef #ifdef 机制,所以,在网上查到的 解决办法是 :在需要的时候 import ,而不是在文件头部 import.

比如这里 C.py import A.py 会发生错误的话, 则把 from A import A 从文件头部, 移到 需要 class A 的 函数体里面,这样就能解决 循环 import 的问题了。


2. __init__.py

以前见过一些这个文件,但不知道这个文件的作用。上网查了才知道。

在一个文件夹下,如果想把这个文件夹里面的所有内容作成一个包(package),则必须由一个 __init__.py ,这个文件即使没有内容,那么这个文件夹也可以作为一个 package 来使用了。

如果里面有内容,通常是 import xxxx 或者 from xxx import xxx .

比如 MyGame这个文件夹有个 由于这个 __init__.py , 则在引用 MyGame  这个包的时候会执行一次, 所以 在 import MyGame 这句时,就会执行 __init__.py 里面的内容, 会自动的 import  许多包。

这样就 使 外部代码 写减少了 许多  import  


总结:

通过上面所说的两个问题,发现 python 的 import 的机制 和 c++ 的 include 机制非常像。但是以前自己只是用  python 临时写一些 小东西,并没有遇到这样的问题。只要稍微用python 做一些 比较面向对象的事情,这样的问题就会不可避免的遇到。

幸亏以前没有和别人说过自己 “熟悉python”,否则遇到这样的问题却需要花时间现看 是多么丢人的一件事。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值