模块
任何Python可以独立运行,也可以做为模块被其它文件导入并使用其中的对象。这是实现代码复用的重要形式。为了组织大规模软件开发,需要把一些独立功能的代码分开存放到各个文件中,模块中每个子文件夹中包含一个__init__.py文件。
比如,习惯上,一个文件中只写一个类(Java的编程思想)
# 类的创建者
class Dog(object):
def __init__(self, name, age):
self.__name = name
self.__age = age
def __str__(self):
return "name:%s,age:%d" % (self.__name, self.__age)
# property装饰器
@property # name = property(name)
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
然后,在主流程的文件(main.py)中,需要导入dog模块,并使用其中的类或函数等标识符。
导入的方法:
方法一:使用import 模块名
此时,需要通过“模块名.类名”或“模块名.函数名”访问对应的标识符
比如:
import dog
dog1 = dog.Dog('旺财', 13)
attrs = vars(dog1)
print(attrs) # {'_Dog__name': '旺财', '_Dog__age': 13}
print(attrs['_Dog__age']) # 13
print(vars())
方法二:使用from 模块名 import 标识符
其中,标识符包括类名、函数名、变量名等等。
from dog import Dog
dog1 = Dog('旺财', 13)
attrs = vars(dog1)
print(attrs) # {'_Dog__name': '旺财', '_Dog__age': 13}
print(attrs['_Dog__age']) # 13
print(vars())
如果要导入模块中的多个标识符,可以通过逗号进行分割
from dog import Dog, HabaDog
如果要导入模块中的全部标识符,可以通过星号代码具体的标识符
from dog import *
如果再创建一个文件test.py写:
from main import *
这样main.py中的所有内容都被导入,这样会存在着极大的风险,为了避免该风险,需要在main.py中添加
# 其它模块或文件导入该模块时,__name__值一般是模块名,不会执行main()
# 仅 main.py运行时,__name__值是__main__
if __name__ == '__main__':
main()
init.py
_init_.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个子模块(子文件夹),都有__init__.py 文件。主要作用是设置__all__变量以及执行初始化模块所需的代码。其中__all__变量中定义的对象可以在使用
from … import * 全部导入。
其中的__init__.py
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from . import fields, reqparse, apidoc, inputs, cors
from .api import Api # noqa
from .marshalling import marshal, marshal_with, marshal_with_field # noqa
from .mask import Mask
from .model import Model, OrderedModel, SchemaModel # noqa
from .namespace import Namespace # noqa
from .resource import Resource # noqa
from .errors import abort, RestError, SpecsError, ValidationError
from .swagger import Swagger
from .__about__ import __version__, __description__
__all__ = (
'__version__',
'__description__',
'Api',
'Resource',
'apidoc',
'marshal',
'marshal_with',
'marshal_with_field',
'Mask',
'Model',
'OrderedModel',
'SchemaModel',
'abort',
'cors',
'fields',
'inputs',
'reqparse',
'RestError',
'SpecsError',
'Swagger',
'ValidationError',
)
项目实战
项目需求(三)
app应用中包含:
- www应用中包含:
-
app和www应用中设置__version__及__description__
-
python manage.py baoai显示版本信息
本章项目源码
URL:https://gitee.com/yuanbaonet/master_python/tree/baoai_python_v11/
对应版本:baoai_python_v11
对应文件:sample/python/p11.py