python工程组织结构包括(包>模块>类>方法>变量),方法和变量好理解,那么我们就弄清楚包、模块、类的含义
包、模块、类的概念
- 包(Package)
包:在Pycharm中的表现形式就是左侧文件列表中的一个目录,通常存放多个关系密切的模块,唯一需要注意的就是,只有包含_ init _.py文件的目录才叫做’包’. - 右键New→Python Package就是创建’包’的过程
- 模块(module)
模块:是一个文件,可以直接使用import导入,可作为模块的文件类型有’.py’,’.pyo’,’.pyc’,’.pyd’,’.so’,’.dll’ - 类
类:用来描述具有共同特征的一类事物,就像我们通俗理解的’人类’可被看作一个类,然后用这个类定义出每个具体的人–你,我,他等作为其对象;类还有属性和功能,属性就是这类事物的特征,功能就是能做什么,也就是方法或函数,举例说明
class Person(): #定义类,起名为Person
n = 100 #类属性,类内的变量
def __init__(self,name,age,phone): #构造函数,类接收外部传入参数全靠构造函数
self.name = name
self.age = age
self.phone = phone
def printing_name(self): #类的方法
print('我的名字是:%s'%self.name)
def printing_age(self):
print("我的年龄:%s"%self.age)
def printing_phone(self):
print("我的号码:%s"%self.phone)
test = Person('luke',21,'123456') #类的实例化,将参数传入类中,传入参
#数可以多但不可以少于类构造函数的参数(self参数
#除外,self是将实例化的变量名传入类)
print("这是类实例化后的内存地址:%s"%test)
test.printing_name() #调用实例化后类中的方法
test.name = 'moon' #可以修改构造函数中参数的值
test.printing_name()
test.printing_phone()
print(test.n)
test.n = 200 #修改类属性,只针对test实例化生效
print(test.n,'\n====================')
t2 = Person('jack',22,'112233') #实例化类对象,命名t2
print(t2.n)
t2.printing_age()
编码规范
- 代码编排
缩进:4个空格的缩进(IDE可自动判断缩进),尽量不适用Tab,也不要Tab和空格混用
换行:使用反斜杠 ’ \ '换行
空行:类和top-level函数定义之间空两行;各方法定义之间空一行;函数内逻辑无关段落间空一行 - 空格的使用
右括号前不加空格
逗号,冒号,分号前不加空格
函数序列左括号前不加空格,func(),list()
多语句不写在同一行,使用’ ; ’
if/for/while语句中,必须另起一行写执行语句
不使用tab键,尽量都是用空格 - 命名规范
包:小写字母命名,可使用下划线,lower_with_under
类:驼峰法命名,首字母大写,私有类下划线开头,HelloWorld
函数:小写字母命名,私有函数下划线开头,lower_with_under
变量:小写字母命名,私有变量下划线开头,lower_with_under
常量:全大写字母命名,私有常量下划线开头,CAPS_WITH_UNDER
总结
1 唯独类命名用驼峰法
2 常量字母都是大写
3 其他全是小写用下划线分隔
4 下划线开头的都是私有的
补充
- 特殊模块_ init _.py
_ init _.py模块,是在新建包时,自动创建的模块,也叫初始化模块;我们在导入该包时,默认会先运行该模块,我们验证一下:
#在_ _init_ _.py模块中加入
print('开始导入包')
有_ init _.py模块的文件夹才叫做’包’,才可以被导入
- _name _=’_main _'
经典解释 → '让你的脚本模块既可以导入其他模块使用,也可使该模块自己执行’
#module.py
def main():
print('我是被直接执行的')
if __name__=='__main__':
main()
else:
print('我被导入')
---------------------------
#test.py
import module
print('导入完成')
我们在直接执行module.py文件时,会执行if判断中的内容,最终输出’我是被直接执行的’;
当我们执行test.py文件时,导入了module模块,最终输出’我被导入’ \n ‘导入完成’,没有执行if判断中的内容,为什么?
解释:
_name _ :前后加双下划线表明是系统定义的变量名,是用来标识模块名字的一个系统变量
如果模块是被导入的,_name _ 的值就是模块名字
如果模块是被直接执行的,_name _的值就是’_main _’
文件中有if _name _ == ‘_main _’,则表明该我文件是整个工程的入口文件
- 模块导入
#import语句
import module ## 导入module模块,python解释器通过sys.path的路径搜索该模块
module.name() ## 调用module中的函数
#更改调用名称
import module as md ## 导入module模块,并命名为md
md.name() ## 调用module中的函数
#from...import...语句
from module import name ## 导入module模块中的name函数,不会导入整个模块
导入要求:要求被导入的模块与准备导入的模块文件是同级,若不在同级,则需要将模块的路径加入该文件的环境变量里