由 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”,否则遇到这样的问题却需要花时间现看 是多么丢人的一件事。。。
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”,否则遇到这样的问题却需要花时间现看 是多么丢人的一件事。。。
相关文章推荐
- 在Python3.4下,用cx_freeze打包PyQt4程序
- python 堡垒机
- python MySQLdb
- python 堡垒机续-----终端方式
- python小白学习之路啊
- python做自动化测试,对java代码做单元测试(2)
- Python扫描指定目录下(包括子目录)的文件
- 用python做自动化测试--对Java代码做单元测试 (1)
- 编写python脚本-->批量下载淘宝 2012年ADC技术嘉年华PDF文件
- 2016/01/18 Python学习1
- python爬虫模拟登录之验证码
- Python学习第四天
- 在spark上做简单的文本分类(python)
- [Python标准库]random——伪随机数生成器
- python修饰符——带参数
- Python一周学习的小结
- Python及requests乱码问题的总结
- python无参数的装饰符
- python 环境搭建(Mac)
- ML--HMM(隐马尔可夫模型及python的实现2)