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最常用 ...
随机推荐
- BZOJ 4556 [Tjoi2016&Heoi2016]字符串 ——后缀数组 ST表 主席树 二分答案
Solution 1: 后缀数组暴力大法好 #include <map> #include <cmath> #include <queue> #include &l ...
- [CODEVS1914] 运输问题(最小费用最大流)
传送门 水题. 建图都不想说了 ——代码 #include <queue> #include <cstdio> #include <cstring> #includ ...
- BZOJ1856 [SCOI2010]生成字符串 【组合数】
题目 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求 ...
- BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】
题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...
- 算法复习——树形dp
树形dp的状态转移分为两种,一种为从子节点到父节点,一种为父节点到子节点,下面主要讨论子节点到父亲节点的情况: 例题1(战略游戏): 这是一道典型的由子节点状态转移到父节点的问题,而且兄弟节点之间没有 ...
- Android多媒体访问
Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(inter ...
- Atcoder CODE FESTIVAL 2017 qual B C - 3 Steps 二分图
题目链接 题意 给定一个无向图,\(n\)个点,\(m\)条边(\(n,m\leq 1e5\)). 重复如下操作: 选择相异的两点u,v满足从点u出发走三条边恰好能到达点v.在这样的u,v点对之间添一 ...
- Android组件实例化问题
对于Application. Activity. Notification. BroadCast. Service 这些组件的使用,对象的实例化问题各有不同,如何实例化以及在什么时候实例化也所有不同. ...
- checkbox 复选框只能选中一次,之后不能用
<td> <input type="checkbox" name="is_check" id="is_check" val ...
- js-控制浏览器和移动端的后退按钮 . popstate
//控制浏览器和移动端的后退按钮 if (window.history && window.history.pushState) { $(window).on('popstate', ...