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最常用 ...
随机推荐
- HUST-1407 郁闷的小J
离线做法:分别处理每个编号上的各种询问和操作,接着就能用树状数组维护. #include <cstdlib> #include <cstdio> #include <cs ...
- scrapy之小试身手
要爬取的网址是:http://quotes.toscrape.com/ 磕磕绊绊的写完了 spiders import scrapy from kkk.items import * class Quo ...
- iOS自定义Navbar
1.修改Navigationbar navigationBar其实有三个子视图,leftBarButtonItem,rightBarButtonItem,以及titleView. 1.1 方法一:a ...
- UVA 116 Unidirectional TSP(DP最短路字典序)
Description Unidirectional TSP Background Problems that require minimum paths through some domai ...
- css3 背景图动画一
一 实现背景图循环播放 @keyframes mlfly { 0%{ background-position:0 0; } 100%{ background-position:210px 0; } } ...
- CI安全
URI安全,CodeIgniter 严格限制 URI 中所能包含的字符,以此帮助你设计的程序减少被恶意数据入侵的可能.URI 一般只包含下列内容: 字母和数字(Alpha-numeric text) ...
- Scrapy学习-16-动态网页技术
Selenium浏览器自动化测试框架 简介 Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 支持的浏览器包括IE(7, 8, ...
- invoke反射
mark一下使用用法,原理以后在搞: 无参数: import java.text.SimpleDateFormat; import java.util.Date; import java.lang.r ...
- TStringList 善用 value['names'] 即使value 是带=号的值都没有关系呵呵 ,我靠 强,以后就用这个了,key=value首选
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4YAAAHiCAIAAAA760U/AAAgAElEQVR4nOy9Z5QUV57oWe/j7tk9u2 ...
- Android调起地图导航
想要使用导航功能可以使用各个地图的开放平台集成导航模块,如果不想集成也可以调起相关app导航 调起其他app首先得使用到该app包名,先贴出来 public final static Strin ...