python工程组织结构包括(包>模块>类>方法>变量),方法和变量好理解,那么我们就弄清楚包、模块、类的含义

包、模块、类的概念

  • 包(Package)
    包:在Pycharm中的表现形式就是左侧文件列表中的一个目录,通常存放多个关系密切的模块,唯一需要注意的就是,只有包含_ init _.py文件的目录才叫做’包’.
  • python 为何方法可以直接被模块引用 python中模块能定义类吗_python

  • 右键New→Python Package就是创建’包’的过程
  • python 为何方法可以直接被模块引用 python中模块能定义类吗_python模块_02

  • 模块(module)
    模块:是一个文件,可以直接使用import导入,可作为模块的文件类型有’.py’,’.pyo’,’.pyc’,’.pyd’,’.so’,’.dll’
  • python 为何方法可以直接被模块引用 python中模块能定义类吗_python包_03


  • 类:用来描述具有共同特征的一类事物,就像我们通俗理解的’人类’可被看作一个类,然后用这个类定义出每个具体的人–你,我,他等作为其对象;类还有属性和功能,属性就是这类事物的特征,功能就是能做什么,也就是方法或函数,举例说明
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('开始导入包')

python 为何方法可以直接被模块引用 python中模块能定义类吗_python_04


有_ 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函数,不会导入整个模块

导入要求:要求被导入的模块与准备导入的模块文件是同级,若不在同级,则需要将模块的路径加入该文件的环境变量里