您的位置:首页 > 编程语言 > Python开发

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

2016-01-18 00:14 585 查看
由 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”,否则遇到这样的问题却需要花时间现看 是多么丢人的一件事。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: