一、封装
什么是封装?
广义上的封装:把变量和函数都放在类中。
狭义上的封装:把一些变量或方法隐藏起来,不对外公开。
对于这种在类中,将变量或方法隐藏起来的,就叫做私有的变量或方法,例如:
class Person: __country = '中国' # 私有的静态属性 print(Person.__country) # 报错信息:AttributeError: type object 'Person' has no attribute '__country'
这样在全局的命名空间中,要想调用__country就调用不来了,那真的就没有办法了吗?不,如:
print(Person._Person__country)
这样就可以调用了。那么我们得出:如果非要在累的外部调用一个私有的名字,那么必须是在私有的名字前面加_类名__私有的名字才行。
再有私有的变量:在类的内部,如果使用__变量的形式,会发生畸形,python会自动为你加上_类名。
所以,封装的特点就是只能在类的内部调用,不能在类的外部使用。
二、类中的装饰器方法
比较常用的就是property,它的作用是讲一个函数伪装成类的一个属性。例如:
from math import pi class Circle: def __init__(self,r): self.r = r @property def area(self): return self.r **2 * pi @property def perimeter(self): return self.r * 2 *pi c= Circle(3) print(c.area) print(c.perimeter)
三、序列化
json和pickle
简单地说:序列化是用来保存当前状态的,例如VMware挂起。
其中json是可跨平台的,例如可跨C、Java,但支持的数据类型有限;
而pickle是在python中通用的,支持几乎所有python中的数据类型。
四、hashlib模块
哈希的算法经常就分为两大类:sha和md5
哈希算法的特点是,无论你运行输出多少次,一个特定的字符串经过哈希后,得到的一定长度的字符串是不变的,且哈希算法是单向的,不能由结果转换回字符串。
目前,我们在设计程序时,经常会用到与用户交互用户名密码,我们就可以通过哈希算法的方式,将用户的密码转化成密文存放到数据库中,但单单哈希密码可能会利用彩虹表撞库将密码撞出来,所以比较安全的加密方式是加盐或动态加盐。
五、反射
如果你能够用好反射,不仅你会节省你的代码,提高效率,还能够通过巧妙地,反射变量的方式,利用面向对象一行省去几十行代码,用好反射,这意味着你将从一个python小白正在向python程序员进阶。
什么是反射呢?
在Python中,一切以xxx.xxx的形式调用的,都可以利用反射。(面向对象)
反射的两个关键函数:hasattr 和 getattr。
六、logging模块
logging模块是用来显示程序的运行状态的。logging的level如下:
logging.debug('debug message') # 非常细节的日志 ———— 排查错误的时候使用 logging.info('info message') # 正常的日志信息 logging.warning('warning message') # 警告 小错误 但能正常运转 logging.error('error message') # 错误 有错误 可以通过某种方式可以过 logging.critical('critical message') # 严重错误 只能重启
七、模块及项目规范性
模块包括:内置模块、扩展模块、自定义模块。
内置模块:是python中自有的,例如:os、sys、time等等;
扩展模块:是大家都在用,但需要安装的,例如:prettytable,beautiful soup等等;
自定义模块:是自己写的,要知道一个py文件就是一个模块。
在项目的规范性中,我们约定俗称:在py文件的第一行,引入你这个py文件中所需的模块,顺序如上定义所示。
项目规范性中,我们就不再是一个py文件搞定所有了(小功能的、小脚本不算,只按项目的规范来谈)。
首先我们至少要在项目的根目录下,创建如下几个目录:
1.bin目录:用于存放start.py,用户运行此文件便可以运行整个项目,即项目程序入口;
2.core目录:用于存放核心程序文件,例如main.py,core.py以及你的重要算法一类的文件;
3.conf目录:用于存放配置文件,例如你的项目需要具有可移植性,即使在其他主机上运行该项目也没问题,那么配置可移植的相对路径,就可以放在这个目录的文件下;
4.db目录:用于存放数据文件,例如:用户信息、序列化文件等。但一般的中型以上的项目,就会使用数据库了,那么这条就可以略了。