(七)如何建立自己的package

java中有包的概念,表示某个特定的文件夹;python同样存在包的概念。可以到python的Lib目录下(默认为"C:\Program Files\py27\Lib")查看,既有.py脚本和.pyc文件,也有文件夹,这些文件夹其实就是python的包。如何引用python包中的模块呢?举个例子,用户如果想要引用./Lib/json/tools.py模块,只需要通过import语法实现:

import json.tools # from json import tools

上面的两种写法是等价的。

这里"json"就是一个典型的python包。怎么定义自己的包呢?很简单。在刚刚提到的"json"文件下,可以看到一个__init__.py脚本。这个脚本的作用是以"json"作为包名建包。所以可以仿照它的构造来建立自己的包。

建立一个空的包

很简单,先创建一个空文件夹(比如test),在test文件夹下添加一个__init__.py空文件。这样就以test作为包名建立了一个包。只是该包没有任何内容,通过import语法可以直接导入到其他脚本中。形成的包对象含有基本的一些属性,比如__doc__,__name__等。

import test
print test.__doc__
print test.__name__

给包添加属性

在__init__.py脚本中添加的函数和全局引用在执行import语句时,作为该包的属性,可以通过"."来访问。

__init__.py:

""" __init__.py
==========================================
    a test for package
==========================================
"""

def GetStringLen(string):
    "to obtain the length of destination string"
    return len(string)

执行的脚本:

import test
print "package docstring =", test.__doc__
print "package name =", test.__name__
print "string length =", test.GetStringLen("hello,world")

执行结果:


增加子模块或者子包

在新建的包中,若需要增加子模块或者子包,直接在其中添加子包和子模块即可。

完整的例子

test.__init__.py:

"""parent package"""

def GetStringLen(string):
    "to obtain the length of destination string"
    return len(string)

new_package.__init__.py:

"""child package"""

new_script.py:

"""new subscript"""

def PrintHelloWorld():
    return "hello,world"

测试脚本1.py:

import test
import test.new_package as NP
import test.new_script as NS

# test
print "===================================="
print "package docstring =", test.__doc__
print "package name =", test.__name__

# new_package
print "package docstring =", NP.__doc__
print "package name =", NP.__name__

# new_script
print "===================================="
print "module function name:", NS.PrintHelloWorld.__name__
print "function result:", NS.PrintHelloWorld()

#GetStringLen()
print "===================================="
print "module function name:", test.GetStringLen.__name__
print "function result:", test.GetStringLen("hello,world")

执行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值