- 博刊:今日物语:CP4——2020.08 三周目
- 时间:2020.08.21~2020.08.31
博刊:今日物语CP4——2020.08 三周目
2020.08.21
1. Python高阶语法
super()
调用 super()的时候,实际上是实例化了一个super类,是用于调用父类(超类)的一个方法,无返回值。
调用父类时遵循MRO顺序
- super(当前类名, self).方法名(args)
- super().方法名(args)
MRO
C3算法,非广度优先算法
类名.__mro__
类名.mro()
多继承
多用super调用父类的方法
2020.08.22
1. Python高级语法
魔法属性
__doc__
类、对象的描述信息
__module__
类、对象、方法、函数的所属模块
__class__
获取对象所属的类
__dict__
以字典的形式显示类或者对象所拥有的所有的属性、方法和其存储的值。
类的
__dict__
属性:类的静态函数、类函数、普通函数、全局变量以及一些内置的属性,不包括实例属性;对象的
__dict__
属性:实例属性。
2020.08.23
1. Python高级语法
魔法方法
__new__()
:创建新的内存空间__init__()
:初始化内存空间,即初始化属性__del__()
:当对象在内存中被释放时,自动触发执行__dir__()
与dir()输出一个类、实例对象、变量或者函数(方法)拥有的所有的属性名和方法名,该函数会返回一个包含该类及其父类中的所有属性名和方法名的有序列表。
类名.__dir__(对象/类名)
对象.__dir__()
__str__()
和__repr__()
- 默认的object类中,
__str__
的默认实现就是调用__repr__
方法; - 列表和字典等容器会调用
__repr__()
,而不是__str__()
; - 在自定义的类中,优先调用
__str__()
,__str__()
不存在时调用__repr__()
,都不存在时取父类中优先查找__str__()
; - 在属性后加上
!r
标记可以使得此属性转换为字符串时,以repr()的方式转换,而不是str()方式;
- 默认的object类中,
2020.08.24
1. Python高级语法
__iter__()
和__next__()
:迭代器__call__()
:装饰器属性访问相关方法:重写方法要避免递归
__getattr__(self, name)
:- 访问不存在的属性时调用;
obj.name
:该属性name在类中不存在。
__getattribute__(self, name)
:- 访问属性时调用,
obj.name
; - 若该属性存在,继续执行自身代码,返回该属性的值;
- 若不存在,去调用
__getattr__(self, name)
。
- 访问属性时调用,
__setattr__(self, name, value)
:- 设置实例对象的一个新的属性时调用
obj.name = value
。
__delattr__(self, name)
:- 删除一个实例对象的属性时调用
del obj.name
。
1
2
3
4
5
6
7
8
9
10
11# 方法一:借用__dict__魔法属性,直接修改字典里实例属性对应的值,不会调用自身(递归),避免死循环
def __setattr__(self, name, value):
self.__dict__[name] = value
# 方法二:直接使用基类的__setattr__()覆盖
def __setattr__(self, name, value):
super().__setattr__(self, name, value)
def __getattribute__(self, item):
print('getattribute:属性访问初始调用的方法')
return super().__getattribute__(item)
2020.08.25
1. Python高级语法
- 索引、字典操作相关方法
__getitem__()
:获取- 使用
obj[item]
时调用,item一般为key(字典键值)或者index(索引) - 可以用来实现索引、key-value查找等功能;
- 案例:斐波那契数列
- 使用
__setitem__()
:修改- 使用
obj[key/index] = value
时调用; - 可以用来实现索引或key-value的赋值、修改等功能;
- 使用
__delitem__()
:删除- 使用
del obj[value]
时调用; - 可以用来实现删除索引、key-value功能;
- 使用
2020.08.26
1. Python高级语法
格式化输出format
字典方式
输出格式设为字典的key,可以使用关键字参数,或者在需要格式化输出的字典前加
**
,如果format()中的字典有多个,key值不能重复。列表方式
需要在format前面的输出格式中列表的索引前加上0,即
{0[index]}
,且format()中的待输出列表只能有一个。实例对象方式输出
需要在format前面的输出格式中实例属性前加上
0.
,即{0.name}
。数字格式化
{:.3f}
:小数点后保留三位{:+.3f}
:带符号输出,+-
都输出小数点后保留三位(正数负数),0输出为+0.00{:-.3f}
:带符号输出,-
输出,+
号省略,小数点后保留三位(正数负数),0输出为+0.00{:*>.3d}
:输出3位,右对齐,左侧补*
,如果没有*
,默认补充空格<, >, ^
分别表示左对齐、右对齐,居中对齐{:0=30}
:输出30位,右对齐,左侧补0,必须是数字才可以使用=
{:,}
:以逗号分隔的形式输出,三位分隔一次,一般用于统计人口、金额{:.2%}
:以百分数形式输出,保留两位小数,默认六位小数{:.2e}
:以指数形式输出,保留两位小数,默认是保留六位小数
转换符号:用
!
开头,表示将待输出的参数通过转换符对应的函数输出!r
对应 repr(),输出内容相比str()会多一个''
;!s
对应 str();!a
对应ascii()。
时间格式输出:
{:%Y-%m-%d %H:%M:%S}
2020.08.27
1. Python MiniWeb框架
- 基础概念
- 静态资源、动态资源
- 服务器框架
- 模板文件
- WSGI
- MiniWeb框架结构
- static:静态资源
- application:动态资源、Web框架
- templates:模板文件
- webserver:Web服务器
- MiniWeb基本框架
miniWebServer.py
:web服务器application\app.py
:判断静态与动态,生成响应报文application\util.py
:拼接响应报文
2020.08.28
1. Python MiniWeb框架
MiniWeb框架:模板加载与替换
加载模板
application\app.py
增加函数
get_template(path, url_list, file_list)
match_template(template_root, file_path)
application\utils.py
修改函数
get_response(environ, start_response)
替换模板
修改模块:
application\utils.py
路由字典
urls.py
:手动保存页面路径及其对应函数,路由字典templates.py
:存放各个页面的函数
路由装饰器
urls.py
:自动保存页面路径及其对应函数,路由字典templates.py
:存放各个页面的函数,以及一个路由装饰器
2020.08.29
1. Python MiniWeb框架
URL类型
- 静态:利于SEO,打开快,但是不适合中大型网站
- 动态:打开慢,适合中大型
- 伪静态
元类
动态创建类:type
__metaclass__
属性自定义元类
ORM:Object Relational Mapping
对象与关系映射,用于简化Python与数据库交互时的SQL语句的代码,无需手动书写SQL,即通过元类来修改类属性进而实现生成SQL语句的功能,代替直接书写SQL语句;在操作数据库的时候,能够像操作实例对象和属性、方法一样简单。
2020.08.30
1. Python MiniWeb框架
MiniWeb框架实战:选股系统
数据库导入
基本结构
Web框架
- application:app.py、utils.py、urls.py、templates.py
- static:css、js、png、jpg
- templates:index.html、center.html、update.html
Web服务器:
miniWeb.py
首页加载:index.html
个人主页加载:center.html
路由装饰器正则表示
通过re正则模块以实现输入的网址与函数多对一的复用关系。
2020.08.31
1. Python MiniWeb框架
MiniWeb框架实战:选股系统
高级功能
更新页面:查询
@route(r”/update.html|/update/(\d*).html”)
templates.py
的update_info()
函数更新页面:修改
@route(r”/update/(\d)/(.).html”)
templates.py
中新增函数update_change()
首页:添加
@route(r”/add/(\d*).html”)
templates.py
中新增函数add()
函数个人中心:删除
@route(r”/del/(\d*).html”)
templates.py
中新增函数delete()
函数日志模块:logging
- DEBUG:详细的信息,通常只出现在诊断问题上;
- INFO:确认一切按预期运行;
- WARNING:一个迹象表明,一些意想不到的事情发生了,或表明一些问题在不久的将来(如,磁盘空间不足)发生,这个软件还能按预期工作;
- ERROR:更严重的问题,软件没能执行一些功能;
- CRITICAL:一个严重的错误,这表明程序本身可能无法继续运行。
日志输出
输出到控制台
输出到文件
创建logger对象,
创建handle对象,然后分别设置级别、格式和文件(路径、编码、写入模式)
将logger添加到handle中
发布时间: 2020-09-01 08:15:18
最后更新: 2022-01-21 23:09:05
本文标题: 博刊:今日物语:CP4——2020.08 三周目
本文链接: https://chthollists.github.io/post/4a816cad.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明作者和出处!
