码迷,mamicode.com
首页 > 其他好文 > 详细

many things for recollection

时间:2017-09-24 20:25:47      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:实例化   self   att   from   ssm   第三方模块   打开   需要   acl   

 

归一化设计

  From abc import ABCmeta, abstractmethod

  class A(metaclass = ABCmeta):

                @abstractmethod

                Def payment(self):  pass

  统一接口,子类就必须有payment方法,否则不能实例化

  class B(A):

                def payment(self):pass

 

  def pay(obj,money):

                obj.payment(money)

  或者采用raise Error的方式在调用统一接口的时候

 

 

私有属性:

  __privatemethod_or_attr

  只能在类的内部调用并且不能被子类继承!

  @classmethod

  只调用类属性的方法

  @staticmethod

  与类和对象无关的方法

  @property

  将方法可以成为属性,并调用

  Class A:

                @property

    def a():return 1

    obj=A()

    obj.a >>>1

    @a.setter

    Def a(self,new): __a=new 尤其是结合私有属性,注意属性不要和方法名重复!

    Obj.a=2 在obj.a= 调用setter里的内容

    @a.deleter

    同setter,在del 的过程中调用

 

 

反射:

  Hasattr(obj,’str’) >>> 

  Getattr(obj,’str’) >>>

  Obj可以为module,class or obj

  ‘str’可以为属性,方法,类

 

 

内置方法:

  Def __getattr__()

  在getattr的时候调用

  Def __setattr__():

  在setattr的时候用

  Def __call__():调用类()的时候用

  Def __hash__():return调用hash方法的时候用

  Def __new__():实例化对象的时候用可以用来设置单例

  Class A:

                def __new__(self,new):

                __a = None

                if a: __a=object.__new__()

  def __len__调用len()的时候调用

  def __eq__调用==的时候调用设置类的判断条件

  __str__ print的时候用

  __repr__repr()的时候调用,repr更加实用,在__str__没有的时候可以补充

  Def __del__():在del的时候调用

  Item 系列:

                在__getitem__在定义对象的索引obj[0]或者切片obj[0:9]的时候用

                __setitem__定义对象的索引等于

                __delitem__定义对象的删除

 

 

  Isinstance 相比type更加好用在多个夫类的多重夫类的时候依然管用

  issubclass

 

 

包和模块:

模块

  通过sys.modules可以查看该脚本调用了什么模块!

  模块是.py

  导入模块用import modulename as newname   (调用方法或者属性需要modulename.func() or modulename.attr)

  模块导入需要尽量不要 import module_a, module_b

  直接导入模块中的方法 from modulename import funcname as new_func_name, funcname1 as New_func_name(调用里面的方法可以不用直接使用属性或者方法名,注意避免和自己的脚本中的属性重名!)可以调用dir(modulename)来查看module里面的属性名,避免重复!

  From modulename import (func1,

                                                      Func2,

                                                      Func3)

  引用的module有自己的命名空间!

  可以用from module import *调用module中所有的公有属性和方法 其中module中的__all__=[‘money‘,‘read1‘]可以用来调控调用内容

  Attention:

  导入会运行程序所以可以利用

  Def __name__==’__main__’:

                Func()

  方法来判断是否是在运行该脚本还是在调用该脚本,而防止在调用的时候就执行!

  如果调用了引用模块的模块,不需再次引用模块!

 

  在测试的时候可以用import importlib; importlib.reload(modulename)

 

  编译文件python会在第一次调用模块的时候生成pyc文件,方便之后调用加快速度

 

包:

  包和文件夹的区别:包中有__init__.py文件

  创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包即模

  包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间

  可以import package.module or from package1.package2 import module or from package1.package2.module import func_attr

 

  __init__py在调用包或者包内的内容的时候都会执行

  如果调用的是包如import package 是不能调用里面的module或者module.func的

  所以可以再__init__.py中写入调用package中的module 这样就可以调入顶层的包就可以啦!

 

  绝对路径和相对路径:

  相对路径以.\filename或者..\filename开头代表同目录下以及上一层目录下的文件夹

  绝对路径以包的起始目录为开头   

  特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式

 

 常用模块hashlib &logging

  Module: hashlib

Import hashlib

md = hashlib.md5()
md.update(bytes(str,encoding=utf-8)) 输入值1
md.update(bytes(str,encoding=utf-8)) 输入值2
cmd = md.hexdigest()  生成md5值

 

用来验证和储存密码!或者用SHA1方法

 

 

Import logging

import logging 

在脚本内只输出到屏幕或者文件可以用一下方法:

logging.basicConfig(level=logging.DEBUG,  

                    format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s,  

                    datefmt=%a, %d %b %Y %H:%M:%S,  

                    filename=/tmp/test.log,  

                    filemode=w)  

  

logging.debug(debug message)  

logging.info(info message)  

logging.warning(warning message)  

logging.error(error message)  

logging.critical(critical message)

参数配置

技术分享
logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:

filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息
View Code

或者用如下方法  既输入到屏幕又输入到文件

import logging

logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler(test.log)

# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()

formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)

fh.setFormatter(formatter)
ch.setFormatter(formatter)

logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
logger.addHandler(ch)

logger.debug(logger debug message)
logger.info(logger info message)
logger.warning(logger warning message)
logger.error(logger error message)
logger.critical(logger critical message‘)

 

many things for recollection

标签:实例化   self   att   from   ssm   第三方模块   打开   需要   acl   

原文地址:http://www.cnblogs.com/yxi-liu/p/7588210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!