# 面对对象三大特性
#继承
#单继承
#多继承
#多态:python天生支持,鸭子类型(list和tuple)
#封装:私有的(__变量)
# @property
# @classmethod
# @staticmethod
# 面对对象进阶
#issubclass isinstance
#反射 hasattr getattr
#内置方法:
#__new__创建self构造方法
#__call__ 对象()
# 创建一个配置文档
# import configparser
#
# config = configparser.ConfigParser()
#
# config["DEFAULT"] = {'ServerAliveInterval': '45',
# 'Compression': 'yes',
# 'CompressionLevel': '9',
# 'ForwardX11':'yes'
# }
#
# config['bitbucket.org'] = {'User':'hg'}
#
# config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
#
# with open('example.ini', 'w') as configfile:
#
# config.write(configfile)
# import configparser
# # config = configparser.ConfigParser()
# # #---------------------------查找文件内容,基于字典的形式
# # print(config.sections()) # []
# # config.read('example.ini')
# # print(config.sections()) # ['bitbucket.org', 'topsecret.server.com']
# # print('bytebong.com' in config) # False
# # print('bitbucket.org' in config) # True
# # print(config['bitbucket.org']["user"]) # hg
# # print(config['DEFAULT']['Compression']) #yes
# # print(config['topsecret.server.com']['ForwardX11']) #no
# # print(config['bitbucket.org']) #<Section: bitbucket.org>
# # for key in config['bitbucket.org']: # 注意,有default会默认default的键
# # print(key)
# # print(config.options('bitbucket.org')) # 同for循环,找到'bitbucket.org'下所有键
# # print(config.items('bitbucket.org')) #找到'bitbucket.org'下所有键值对
# # print(config.get('bitbucket.org','compression')) # yes get方法Section下的key对应的value
# import configparser #增删改
# config = configparser.ConfigParser()
# config.read('example.ini')
# config.add_section('yuan')
# config.remove_section('bitbucket.org')
# config.remove_option('topsecret.server.com',"forwardx11")
# config.set('topsecret.server.com','k1','11111')
# config.set('yuan','k2','22222')
# config.write(open('new2.ini', "w"))
# logging模块
import logging
# logging.debug('debug message')
# logging.info('info message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
# 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='test.log',
# filemode='w')
#
# logging.debug('debug message')
# logging.info('info message')
# logging.warning('warning message')
# logging.error('error message')
# logging.critical('critical message')
import logging
logger = logging.getLogger()
# 创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding='utf-8')
# 再创建一个handler,用于输出到控制台
ch = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setLevel(logging.DEBUG)
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')