python中get和set使用_Python中的__get__与__set__
1、__get__的用法
2、Flask中的使用
2.1、Flask中源码
Flask类:
class Flask(_PackageBoundObject):
testing = ConfigAttribute('TESTING')
secret_key = ConfigAttribute('SECRET_KEY')
session_cookie_name = ConfigAttribute('SESSION_COOKIE_NAME')
permanent_session_lifetime = ConfigAttribute('PERMANENT_SESSION_LIFETIME',
get_converter=_make_timedelta)
send_file_max_age_default = ConfigAttribute('SEND_FILE_MAX_AGE_DEFAULT',
get_converter=_make_timedelta)
use_x_sendfile = ConfigAttribute('USE_X_SENDFILE')
env = ConfigAttribute('ENV')
ConfigAttribute类:
class ConfigAttribute(object):
"""Makes an attribute forward to the config"""
def __init__(self, name, get_converter=None):
self.__name__ = name
self.get_converter = get_converter
def __get__(self, obj, type=None):
print("__get__() is called", obj, type)
if obj is None:
return self
rv = obj.config[self.__name__]
if self.get_converter is not None:
rv = self.get_converter(rv)
return rv
def __set__(self, obj, value):
print("__set__() is called", obj, value)
obj.config[self.__name__] = value
2.2、测试用Flask程序
from flask import Flask,Response
from settings import config
app = Flask(__name__)
app.config.from_object(config['default'])
print("*"*50)
print(app.secret_key)
app.secret_key = "123"
print("*"*50)
print(app.session_cookie_name)
app.session_cookie_name = "session_ok"
print("*"*50)
@app.route('/home/')
def home():
return Response("home,hello")
if __name__ == "__main__":
app.run()
setting.py源程序:
import os
import logging
import datetime
# print(__file__)
# print(os.path.dirname(__file__))
basedir = os.path.abspath(os.path.dirname(__file__))
# print(basedir)
class InfoFilter(logging.Filter):
def filter(self, record):
"""
only use INFO
筛选,只需要INFO级别的log
:param record:
:return:
"""
if logging.INFO <= record.levelno
# 已经是INFO级别了
# 然后利用父类,返回1
return super().filter(record)
else:
return 0
class BaseConfig(object):
DEBUG = False
TESTING = False
PROPAGATE_EXCEPTIONS = None
PRESERVE_CONTEXT_ON_EXCEPTION = None
SECRET_KEY = None
PERMANENT_SESSION_LIFETIME = datetime.timedelta(31)
USE_X_SENDFILE = False
LOGGER_NAME = "app"
LOGGER_HANDLER_POLICY = "always"
SERVER_NAME = None
APPLICATION_ROOT = None
SESSION_COOKIE_NAME = "session"
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_PATH = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SECURE = False
SESSION_REFRESH_EACH_REQUEST = True
MAX_CONTENT_LENGTH = None
SEND_FILE_MAX_AGE_DEFAULT = datetime.timedelta(0, 43200)
TRAP_BAD_REQUEST_ERRORS = False
TRAP_HTTP_EXCEPTIONS = False
EXPLAIN_TEMPLATE_LOADING = False
PREFERRED_URL_SCHEME = 'http'
JSON_AS_ASCII = True
JSON_SORT_KEYS = True
JSONIFY_PRETTYPRINT_REGULAR = True
JSONIFY_MIMETYPE = 'application / json'
TEMPLATES_AUTO_RELOAD = None
LOG_PATH = os.path.join(basedir, 'logs')
LOG_PATH_ERROR = os.path.join(LOG_PATH, 'error.log')
LOG_PATH_INFO = os.path.join(LOG_PATH, 'info.log')
LOG_FILE_MAX_BYTES =100*1024*1024
# 轮转数量是10个
LOG_FILE_BACKUP_COUNT = 10
@classmethod
def init_app(cls, app):
pass
class ProductionConfig(BaseConfig):
DEBUG = False
class DevelopmentConfig(BaseConfig):
DEBUG = True
SECRET_KEY = "avafaewffewfaew"
@classmethod
def init_app(cls, app):
# BaseConfig.init_app(app)
super().init_app(app)
import logging
from logging.handlers import RotatingFileHandler
# Formatter
formatter = logging.Formatter(
'%(asctime)s %(levelname)s %(process)d %(thread)d '
'%(pathname)s %(lineno)s %(message)s')
# FileHandler Info
file_hander_info = RotatingFileHandler(filename=cls.LOG_PATH_INFO)
file_hander_info.setFormatter(formatter)
file_hander_info.setLevel(logging.INFO)
info_filter = InfoFilter()
file_hander_info.addFilter(info_filter)
app.logger.addHandler(file_hander_info)
# FileHandler Error
file_hander_error = RotatingFileHandler(filename=cls.LOG_PATH_ERROR)
file_hander_error.setFormatter(formatter)
file_hander_error.setLevel(logging.ERROR)
app.logger.addHandler(file_hander_error)
class TestConfig(BaseConfig):
DEBUG = True
config = {
'development': DevelopmentConfig,
'production': ProductionConfig,
'testing': TestConfig,
'default': DevelopmentConfig,
}
2.3、执行测试程序
打印输出:
**************************************************
__get__() is called
avafaewffewfaew
__set__() is called 123
**************************************************
__get__() is called
session
__set__() is called session_ok
**************************************************
__get__() is called
python中get和set使用_Python中的__get__与__set__相关推荐
- Python基础_第3章_Python中的循环结构
Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...
- Python基础_第5章_Python中的数据序列
Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...
- python post与get的区别_python中get和post有什么区别
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...
- python深复制与浅复制_Python中的深拷贝和浅拷贝详解
要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, ...
- python运行mcmc为何老出错_python中mcmc方法的实现
MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...
- python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续
上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...
- python计算数组元素的和_python中数组的运算
Python中进行数组的运算需要调用NumPy包. 其官网是:http://www.numpy.org/www.numpy.org NumPy是Python语言的一个扩充程序库.它支持高级大量的维度 ...
- python中格式化字符串的作用_python中字符串格式化的意义(化妆)
格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...
- python中 r是什么意思_python中rb含义理解
Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 文件使用方式标识 'r':默认值,表示从文件读取数据 'w':表示要向文件写入数据,并截断以前 ...
- python字典是什么的集合_Python中的字典和集合
文章目录字典1.介绍 2.创建字典 3.字典内元素的访问 4.字典元素的添加.修改.删除 5.关于字典的其它操作 6.字典存储底层原理 集合1.介绍 2.相关操作 3.集合元素的添加 4.移除元素 字 ...
最新文章
- 面向小白的最全 Python 可视化教程,超全的!
- 查看tensorflow安装版本
- Linux的cp -a与cp -p
- day 64 Django 第五天 多表对多表的对应关系ORM
- bootstrapValidator remote 验证问题
- 22 CO配置-控制-产品成本控制-成本对象控制-检查制造订单 (PP) 的评估变式
- webpack及node.js基础必会--path模块的常见操作
- 剑指offer面试题13:O(1)删除链表结点
- 实战爬虫:python爬虫学习笔记之爬取大前端网站
- Web网站扫【小程序码】登录的技术实现
- ps快速抠图 PS抠白底图
- 别再问我如何制作甘特图了!
- 入华商用四周年,Office 365小程序在路上
- 408 知识点笔记——操作系统(绪论、进程管理)
- 小米笔记本桌面没有计算机,没有4K屏幕,只有3.5K,小米笔记本真好用吗?
- 基于javaweb+springboot的医院管理系统(java+Springboot+ssm+mysql+maven)
- 逆波兰式的转换与计算(简单)
- colorkey口红怎么样_colorkey镜面唇釉怎么样
- s7-200与计算机modbus通讯案例,西门子S7-200 Smart Modbus通信介绍与实例编程
- 【高项】成本管理(ITTO)
热门文章
- Swift3.0语言教程字符串与URL的数据转换与自由转换
- DHCP欺骗(DHCP Sproofing)
- Xamarin.Android提示找不到mono.Android.Support.v4
- Unity 4.x 2D游戏开发基础教程大学霸第一更
- db2设置默认schema_DB2中设置当前会话的Schema
- 科学家利用BCI技术来缓解幻肢疼痛
- java软件下载jar_qdox.jar免费版
- 苹果的新Siri:不男,也不女
- 今年你的双11包裹,也是自动驾驶卡车送来的吗?
- Office for AI | 拯救互联网人崩溃瞬间