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最常用 ...
随机推荐
- kb-07线段树-05-区间整体修改查询;(水)
/* */ #include<iostream> #include<cstring> #include<cstdio> using namespace std; s ...
- 用echarts.js制作中国地图,点击对应的省市链接到指定页面
这里使用的是ECharts 2,因为用EChart 3制作的地图上的省市文字标识会有重叠,推测是引入的地图文件china.js,绘制文字的坐标方面的问题,所以,这里还是使用老版本. ECharts 2 ...
- HDU——1233还是畅通工程(克鲁斯卡尔+优先队列)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- bzoj1076【SCOI2008】奖励关
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有n种物品等概率落下,求期望最优收益 sol: 一眼看上去就是状压dp吧QAQ数据范围 ...
- 轻量级神经网络平台tiny-dnn实践
tiny-dnn跑起来 github: https://github.com/tiny-dnn/tiny-dnn#build 先上github下载tin ...
- jacoco功能测试覆盖率统计
1.在java程序的启动脚本(或者tomcat)中加入javaagent参数-javaagent:/home/apps/jacocoagent.jar=destfile=/home/apps/jaco ...
- Java语言编码规范 - Java语言编码规范(中文版)(http://doc.javanb.com/code-conventions-for-the-java-programming-language-zh/index.html)
目录 1 介绍 1.1 为什么要有编码规范 1.2 版权声明 2 文件名 2.1 文件后缀 2.2 常用文件名 3 文件组织 3.1 Java源文件 3.1.1 开头注释 3.1.2 包和引入语句 ...
- 大规模SOA系统中的分布事务思考
首先是不建议采用XA两阶段提交方式去处理分布式事务,要知道要能够支持XA分布式事务,必须是要实现XA规范才可以,而Service本身是无状态的,如果这样去做了等于是把Service内部的东西暴露了出去 ...
- JAVA特性面试题:
1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...
- FileReader与FileWriter
分别继承于InputStreamReader OutputStreamWriter 所以: FileReader:new FileReader(“d:/back/string.txt”) = ...