python继承,import总结继承先看一个例子:):super(Child,self).__init__("test")print"thisischild,nameis%s"%(name)defmain():Child("test_child")main()运行这段代码,它将报错:Traceback(mostrecentcalllast):File"parent.py",line14,inmain()File"parent.py",line12,inmainChild("test_child")File"parent.py",line8,in__init__super(Child,self).__init__("test")TypeError:mustbetype,notclassobj这是因为python中的super只能应用于新类,不能应用于经典类。所谓新建类就是所有类都必须有继承类。如果你不想继承任何东西,你可以从对象类继承修改后的代码。ClassParent(object):def__init__(self,name):print"parent,nameis%s"%(name)classChild(Parent):def__init__(self,name):super(Child,self).__init__("test")print"thisischild,nameis%s"%(name)defmain():Child("test_child")main()让父母继续继承object类,可以,再运行:parent,name为testthischild,name为test_childimport首先看工程结构:[wangzijie@kaifapy]$tree`--import_test|--ali||--云.py||--__init__.py||--__init__.pyc||--淘宝|||--__init__.py|||--__init__.pyc|||--淘宝.py||`--淘宝.pyc|`--test.py|--百度||--百度.py||--百度.pyc||--__init__.py|`--__init__.pyc|--__init__.py|--__init__。pyc|--main.py`--tengxun注意,如果要在main中引用taboo.py,必须在阿里和淘宝目录下都创建一个空的__init__.py文件,然后再看main.py:importali.taobao.taobaodefmain():tb=TaoBao()tb.sell()main()importali.taobao.taobao意思是导入ali目录和taobao目录下的taobao.py文件,但是会报错被报告:回溯(最近调用最后):文件“main.py”,第7行,在main()文件“main.py”,第4行,在maintb=TaoBao()NameError:globalname'TaoBao'isnotdefined这是因为要使用导入包里面的东西,需要添加包的前缀修改:importali.taobao.taobaodefmain():tb=taobao.TaoBao()tb.sell()main()在上面运行:Traceback(最近一次调用last):文件“main.py”,第7行,在main()文件“main.py",line4,inmaintb=taobao.TaoBao()NameError:globalname'taobao'isnotdefined在golang中,导入的包只需要添加最后一项,即taobao;但是python不一样,所有导入路径都要加上:importali.taobao.taobaodefmain():tb=ali.taobao.taobao.TaoBao()tb.sell()main()可以运行成功,但是package名称太长,改进,使用import...作为包的别名:importali.taobao.taobaoastaobaodefmain():tb=taobao.TaoBao()tb.sell()main()也可以参考用指定某包下某文件的方法:fromali.taobaoimporttaobaodefmain():tb=taobao.TaoBao()tb.sell()main()指定ali包下importtaobao.py和淘宝包下的文件也可以引用淘宝文件中的淘宝类fromali.taobao.taobaoimportTaoBaodefmain():tb=TaoBao()tb.sell()main()这样就没有前缀了需求总结:from...import...,可以指定导入某个目录下的某个文件,也可以指定导入某个文件中的某个类、函数、变量;这种目录结构的另一种情况:.|--ali||--云.py||--__init__.py||--__init__.pyc|`--淘宝||--__init__.py||--__init__.pyc||--淘宝.py|`--taobao.pyc|--baidu||--百度.py||--百度.pyc||--__init__.py|`--__init__.pyc|--__init__.py|--__init__.pyc|--main.py`--腾迅想在ali/cloud.py中导入baidu.py,怎么导入?看cloud.py的代码:fromimport_test.baidu.baiduimportBaiduclassAli(object):def__init__(self):self.partner=Baidu()self.partner.show()print"initali"defmain():ali=Ali()if__name__=="__main__":如果直接运行main(),会报错:Traceback(mostrecentcalllast):File"cloud.py",line1,in来自import_test.baidu。baiduimportBaiduImportError:Nomodulenamedimport_test.baidu.baidu这是因为python搜索模块的路径。它会先搜索自己的模块,没有的话再搜索sys.path;sys.path是先执行脚本的位置,然后是PYTHONPATH。最后,安装依赖的位置;由于baidu.py是自定义模块,应该在sys.path中查找,肯定找不到脚本执行位置,所以去PYTHONPATH中查找;开始前添加:[wangzijie@kaifa]$PYTHONPATH=/home/wangzijie/dev/test/py/pythoncloud.pyin它baiduthis是baiduinitali可以成功。注意,如果要引用import_test.baidu.baidu模块,必须保证每个包下都有一个__init__.py文件;