python--软件规范和反射
软件开发规范
写一个作业的时候,要将写的代码分开
bin文件夹里面第一个是start文件
核心代码都在core文件夹里面 文件core最好也是固定名字
BaseDir=os.path.dirname(os.path.dirname(os.getcwd()))
sys.path.append(BaseDir)
from ChoiceCourses.core import core
core.main()
db文件夹就存所有的数据
lib 放一些扩展模块,包
log记录操作的日志
conf文件夹中写配置文件
isinstance和issubclass
isinstance()
from collections import Iterable
isinstance(range(10),Iterable)
判断是不是一个可迭代对象
class Foo(object):pass
obj=Foo()
isinstance(obj,Foo)
判断是不是类的对象
如果有继承关系,就不准确
如果有继承关系的话,也是这个子类的父类的对象,所以不准确
issubclass看是否有继承关系
反射
必须会getattr和hasattr
class SB:
def __init__(self,name):
self.name=name
def happy(self):
print('%s is happy'%self.name)
jinghong=SB('景洪')
jinghong.happy()
s='happy'
func=getattr(jinghong,'happy')
func()
getattr可以用字符串调用方法,就是括号前面放对象,后面放方法的字符串格式
ret=getattr(jinghong,'name')这样也可以调用name 平常调用不了self.name
但是这样的话就可以调
反射:把一个字符串数据类型的变量变成一个真实存在这个程序中的变量名,并且能够使用他
hasattr判断是否存在这个要执行的如果存在返回True
可以用输入的方法来进行调用了
import sys
sys.modules['__main__']表示当前路径的模块
想要引用当前自己模块的方法的话,就要借用这个方法
[__name__]谁调用就是谁的路径模块
import sys
def jing():
print('jing_sb')
sy='shengyue'
n=input('>>')
z=input('>>')
getattr(sys.modules[__name__],n)()
print(getattr(sys.modules[__name__],z))
用字符串调用自己模块的方法
getattr是反射的灵魂
hasatte和getattr是最佳cp
类名调属性或方法(静态属性,静态方法和类方法)
对象名调属性或方法(对象属性,普通方法(self))
模块名调用属性或方法(变量,函数)
在自己模块中调用属性或方法(变量,函数)
setattr(jinghong,'sex','female') 只能添加静态方法
这样可以添加属性 sex是属性名,female是值
setattr并不能真的把绑定方法绑定
delattr() 删除属性
内置方法
__str__ 这样的话
__repr__比str的要好 没有__str__的话str()也实现 但是没有__respr__
只有str的话str无法实现repr()
repr是str的备胎
__del__ 直接del 就执行了 是del顺带触发的(析构函数)
不调用__del__自己也会执行
对象加()自动回执行 def __call__(self)
(cat==dog)自动触发双下eq
hash()自动出发双下hash
class Animal:
def __str__(self):
return '%s : %s'%(self.kind,self.name)
print(str(cat))
item系列
__getitem__(self,item)方法
getattr(self,item)是该返回的
这个系列都是用中括号,字典一样取值
这个是取值
要是想赋值的话:
用 __setitem__(self,key,value)
这样的话就可以给item系列的key进行赋值
单例模式:
由于特殊需求使一个类从始至终只能有一个对象
实例始终只有一个,他的属性可以随着你的改变而改变
class Teacher(object):
__isinstance=None
def __new__(cls,*args,**kwargs):
if not cls.__isinstance:
cls.__isinstance=object.__new__(cls)
return cls.__isinstance
def __init__(self,name,cloth):
self.name=name
self.cloth=cloth
liulaoshi=Teacher('liulaoshi','白色')
print(liulaoshi)
wanglaoshi=Teacher('王庆帅','黑色')
print(wanglaoshi)
shuffle打乱顺序
常用模块补充:
hashlib 摘要算法
hash()算法,任何一个对象进去都有唯一一个对应值
hashlib检验文件的一致性
存储密文密码
两种算法
一个md5 速度很快最常见的摘要算法,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示
一个sha1 结果是160bit字节,通常用40位的16进制字符串表示 更安全一点,但是慢 越长越安全越长越慢
检验文件一致性:打开文件取出来直接检验就行
import hashlib
md5_obj=hashlib.md5()
md5_obj.update(bytes('李杰',encoding='utf-8)) 只接受bytes类型
print(md5_obj.hexdigest())
想要使用的话要转成bytes类型
摘要的话值永远不会变
支持一部分一部分的去做摘要
可以分开去进行算法
存储密文
将密码的hash放进文件然后判断输入的hash是否相同
md5单向的,智能摘要成密文,不能反解
还是可以暴力破解
md5可以加严
logging模块
默认从warning级别开始往下打印
import logging
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s[%(lineno)d]%(message)s'
datefmt='%y/%m/%d %H:%M:%S'
filename='test.log'
filemode='w')
logging.debug()
logging.info
logging.warning
logging.error
logging.critical
logger对象:
logger=logging.getLogger()
logger.addHandler()
python--软件规范和反射的更多相关文章
- 【转】python编写规范——中标软件有限公司测试中心
[转]python编写规范 一.说明 二.内容 1. 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行... 1.5 编码... 2. 语句... 2.1 标准 ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- Python开发规范
背景 Python语言规范 Lint 导入 包 异常 全局变量 嵌套/局部/内部类或函数 列表推导(List Comprehensions) 默认迭代器和操作符 生成器 Lambda 函数 条件表达式 ...
- google的python语言规范
Python语言规范 Lint Tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less ...
- Python 语言规范
Python 语言规范 pychecker 对你的代码运行pychecker 定义: pychecker 是一个在Python 源代码中查找bug 的工具. 对于C 和C++这样的不那 么动态的( ...
- Python 语言规范(Google)
Python语言规范 Lint tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dy ...
- python--基础1(pip,虚拟环境、python编写规范)
python简介 1.Python是一种解释型脚本语言; 2.Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言; 3.pytho ...
- python编码规范
python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...
- 【转】python编码规范
http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...
- Python编程规范(PEP8)
Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...
随机推荐
- 【bzoj2698】染色 期望
题目描述 输入 输入一行四个整数,分别为N.M.S和T. 输出 输出一行为期望值,保留3位小数. 样例输入 5 1 2 3 样例输出 2.429 题解 期望 由于期望在任何时候都是可加的,因此只要算出 ...
- HDU——2054A==B?
A == B ? Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU——4291A Short problem(矩阵快速幂+循环节)
A Short problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU-3592 World Exhibition
差分约束. 很容易看出两种约束方式,然后建图.而且题目要求排序不能乱,于是加上第三种约束. 求最长就跑一遍最短路啊就行了. #include <cstdlib> #include < ...
- co模块总结
1.thunk函数 javascript中的thunk函数就是一个单参数函数,且该参数必须是一个callback函数,callback的签名必须为callback(err,args...); 所谓的t ...
- Mondriaan's Dream(poj 2411)
题意:在n*m的方格里铺1*2的骨牌,有多少种方案 /* 第一次做插头DP,感觉和状压差不多. 这道题是利用上一行的状态来更新下一行的状态. 1代表上一行这个位置填了一个竖的(即本行可以填): 0代表 ...
- C++基类与派生类的转换
具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对 ...
- 2017.8.2 Noip2018模拟测试赛(十八)
日期: 八月二日 总分: 300分 难度: 提高 ~ 省选 得分: 40分(又炸蛋了!!) 题目列表: T1:分手是祝愿 T2:残缺的字符串 T3:树点涂色 赛后心得: 哎,T1求期望,放弃. ...
- 【BZOJ入门3189】 猜数字(数学,搜索)
Description 味味最近在玩猜数字的游戏,现在她也希望你来玩一下这个游戏.猜数字游戏的规则是这样的,告诉你一个正整数 n(2<=n<=11),然后味味心中会想一个 n 个数字组成的 ...
- JVM指令助记符
以下只是JVM指令助记符,关于JVM指令的详细内容请阅读<JVM指令详解> 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dlo ...