软件开发规范

写一个作业的时候,要将写的代码分开
  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--软件规范和反射的更多相关文章

  1. 【转】python编写规范——中标软件有限公司测试中心

    [转]python编写规范 一.说明 二.内容 1. 代码布局 1.1 缩进 1.2 表达式和语句中的空格 1.3 行的最大长度 1.4 空行... 1.5 编码... 2. 语句... 2.1 标准 ...

  2. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  3. Python开发规范

    背景 Python语言规范 Lint 导入 包 异常 全局变量 嵌套/局部/内部类或函数 列表推导(List Comprehensions) 默认迭代器和操作符 生成器 Lambda 函数 条件表达式 ...

  4. google的python语言规范

    Python语言规范   Lint Tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less ...

  5. Python 语言规范

    Python 语言规范 pychecker  对你的代码运行pychecker 定义: pychecker 是一个在Python 源代码中查找bug 的工具. 对于C 和C++这样的不那 么动态的( ...

  6. Python 语言规范(Google)

    Python语言规范 Lint tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dy ...

  7. python--基础1(pip,虚拟环境、python编写规范)

    python简介 1.Python是一种解释型脚本语言; 2.Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言; 3.pytho ...

  8. python编码规范

    python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...

  9. 【转】python编码规范

    http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...

  10. Python编程规范(PEP8)

    Python编程规范(PEP8) 代码布局 缩进 对于每一次缩进使用4个空格.使用括号.中括号.大括号进行垂直对齐,或者缩进对齐. 制表符还是空格? 永远不要将制表符与空格混合使用.Python最常用 ...

随机推荐

  1. C# Settings.settings的用处

    1.定义 在Settings.settings文件中定义配置字段.把作用范围定义为:User则运行时可更改,Applicatiion则运行时不可更改.可以使用数据网格视图,很方便: 2.读取配置值 t ...

  2. Java面试题之ArrayList和LinkedList的区别

    先看下类图: 相同点: 都实现了List接口和Collection: 不同点: 1.ArrayList是基于数组实现的:LinkedList是基于链表实现的: 2.ArrayList随机查询速度快:L ...

  3. 实验六 TLS协议报文解析

    一.实验目的 1.访问一个https://....的网站,捕TLS包并分析报文序列. 2.分析连接建立的完整过程,如:TCP三次握手.SSL安全连接,使用TLS协议连接.协商过程,加密传送的状态.TC ...

  4. centos7配置国内yum源

    文章目录 1.什么是yum仓库? 2.yum仓库配置 2.1.阿里镜像仓库配置 2.1.1.配置步骤 2.1.2.epel源 安装和配置 2.1.3.查看yum源 2.2.配置 清华大学镜像仓库 1. ...

  5. bzoj 4034 [HAOI2015]树上操作 入栈出栈序+线段树 / 树剖 维护到根距离和

    题目大意 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  6. vue.js源码学习分享(八)

    /* */ var uid$1 = 0; /** * A dep is an observable that can have multiple * directives subscribing() ...

  7. 回调函数 typedef bool (*IsUsed)(const string &name,boost::shared_ptr<ShpGeometry> oneGeometry);

    就是指向函数的指针. 回调函数,表示了一个函数的地址,将函数作为参数进行使用.参考百度百科:http://baike.baidu.com/view/414773.htm 常用的大概就是在sort函数中 ...

  8. 监听EditText输入完成

    最近有个需求,要在用户输入完快递单号之后,请求快递100接口,拿到快递公司信息.总不能用户输入一个数字就请求一次吧,给服务器造成不必要的压力(虽然不是自家服务器).但是又无法知晓用户何时输入完毕,每家 ...

  9. React-Native解决ListView 在Android手机上无吸顶效果

    stickySectionHeadersEnabled={true} stickyHeaderIndices={[0]}

  10. 2017 ACM-ICPC 沈阳区域赛记录

    出发日 中午坐大巴前往萧山机场. 哇开心又可以坐飞机了 飞机延误了.在候机大厅里十分无聊,先用机场的电脑玩了会小游戏 然后偷偷切了2个水题 (什么编译器IDE都没有,只能记事本了) 飞机上什么东西都没 ...