python进阶手记(二)

魔法属性与魔法方法

强烈建议阅读python魔术方法指南:
https://pyzh.readthedocs.io/en/latest/python-magic-methods-guide.html

魔术属性和魔法方法

  • __dict __ / __doc __ / __module __ / __class __ / __stots __
  • 两阶段构造:__new __ / __init __
  • 运算符重载:__lt __ / __ge __ / __add __ / __getitem __
  • 可调用对象: __call __
  • 深拷贝和浅拷贝:__copy __ / __deepcopy __
    上下文管理器:__enter __ / __exit __

MRO(方法解析顺序)问题

  • 新式类:C3算法 (类似广度优先)
  • 旧式类:深度优先搜索
  • 类的mro()方法

示例 :在python3中求最后的运行结果
python进阶手记(二)_第1张图片
元类

class SingletonMeta(type):
    def __init__(cls, *args, **kwargs):
    # args是一个三元组
    # 第一个元素是元类创建的类
    # 第二个参数是要创建的类的父类(元组)
    # 第三个参数是要创建的类的所有属性(字典)
        cls._instance = None
        super().__init__(*args, **kwargs)

    def __call__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__call__(*args, **kwargs)
        return cls._instance


class Boss(object, metaclass=SingletonMeta):
    def __init__(self, name, sex):
        self.name = name
        self.sex = sex

    def __str__(self):
        return f"老板信息:{self.name},{self.sex}"


b1 = Boss("叔本华", "男")
b2 = Boss("天问一号", "男")

print(b1, b2)

典型互联网公司架构

python进阶手记(二)_第2张图片

软件开发过程模型

瀑布模型

python进阶手记(二)_第3张图片

敏捷开发

python进阶手记(二)_第4张图片

敏捷闭环工具:禅道

必看文档:基于JIRA的Scrum敏捷开发的项目管理

代码管理流程

Github-flow流程

python进阶手记(二)_第5张图片

git clone xxx.git   # 克隆仓库及所有之前的版本提交信息
git clone --depth=1 xxx.git    # 只克隆最新一版的仓库
git clone xxx.git  aaa   # 克隆仓库并在本地改为aaa的名字
git long    # 查看git日志(需进入到.git目录下) 
git branch aaa  # 创建aaa的分支
git branch # 查看分支
git branch -a   # 查看所有分支,包括远端
git switch -c bbb  # 创建并切换到bbb分支
git switch aaa  # 切换到aaa的分支  
git status  # 工作区、暂存区、本地的版本仓库是否同步 
git add xxx.py  # 将xxx.py 加入到暂存区
git restore --staged xxx.py  # 从暂存区取出
git commit -m "提交信息:完成了某项功能"  # 从暂存区加入到本地版本仓库中
git remote  # 查看远程仓库
git remote -v  # 查看远程仓库信息  
git push -u origin aaa:aba  # 将本地aaa分支推到服务器中并改名为aba
# 完成到一定程度后,在服务器中请求合并分支,由代码审查人员审定通过  
git checkout master  # 在本地切回master分支
git branch -d aaa  # 删除已在服务器合并的本地aaa分支
git branch -D aaa  # 强制删除已在服务器合并的本地aaa分支
git pull  # 将服务器代码更新到本地
git pull origin master  # 将服务器master分支合并到本地分支
#  CONFLICT 冲突
git diff  # 查看冲突文件  协商解决
# 协商解决好后,在push到服务器,请求合并

Git-flow流程

python进阶手记(二)_第6张图片
可参见:

  • git-flow 的工作流程
  • Gitflow工作流程

由于这套流程相对复杂,强烈建议使用SmartGit / SourceTree这些工具进行版本管理开发。

补充:git mergegit rebase的区别

git rebase相比git merge在合并代码时结构更清晰
python进阶手记(二)_第7张图片

git rebase master  # 变基到master
git switch master
git merge dev  # 合并dev (--no-ff 不要快速合并,有利于保留历史信息 这里不需要加)
#git pull = git fetch + git merge    拉取再合并 
git stash  # 将当前未完成的分支工作进行临时存放到栈中  (git status 为空)
git stash list  # 查看栈中临时存放的任务
git stash pop  # 弹出之前临时存放的分支工作 (git status重新为红色)

最佳git教程电子版在线阅读:pro git

代码优化

代码结构优化

python进阶手记(二)_第8张图片
代码中的坏味道:

  • 重复代码
  • 长方法
  • 巨型类
  • 长参数
  • 继承滥用

代码性能优化

python进阶手记(二)_第9张图片
排序算法可参考:排序算法详解
查找算法可参考:常见快速查找算法图解
python进阶手记(二)_第10张图片
第三方剖析工具:

  • line_profiler:在需要剖析的函数加上装饰器@profile,运行kernprof -lv test.py,可分析出该函数每行的执行时间
  • memory_profiler:在需要剖析的函数加上装饰器@profile,运行python3 -m memory_profiler test.py,可分析出该函数每行的内存占用情况

并发编程

内容太多,暂时略过

代码安全

python进阶手记(二)_第11张图片
python进阶手记(二)_第12张图片
python进阶手记(二)_第13张图片
python进阶手记(二)_第14张图片

项目架构

python进阶手记(二)_第15张图片
python进阶手记(二)_第16张图片
python进阶手记(二)_第17张图片
业务架构:

项目整体介绍,交代具体模块划分,项目目前的运营状况,用户群体,每日PV、UV、独立IP等。

技术架构:

  • 前端核心技术:Vue.js / React / Uni-App / ReactNative / Flutter / Electron
  • 后端核心框架:Django / Flask / Tornado / Sanic / FastAPI
    • djangorestframework / django-filter / drf-extensions
    • django-redis / pillow /reportlab / xlrd / xlwt
    • celery / apscheduler / pyjwt
    • pycrypto / itsdangerous
  • 持久化(关系型数据库):MySQL / PostagreSQL / Oracle / TiDB
  • 缓存:Memcached / Redis
  • 消息队列:Redis / RabbitMQ / Kafka
    • 任务异步化(削峰)
    • 上下游解耦合
  • 搜索引擎:实现全文检索 - ElasticSearch / Solr / Whoosh+jieba
    • 倒排索引
    • 中文分词(ik-analysis、smartch) / 拼音分词(pinyin)
  • 静态资源:
    • 文件服务器 / 分布式文件系统 - FastDFS
    • 云存储(资源管理、CDN) AWS / OSS / Qiniu / Bmob
  • 三方服务
    • 短信邮件:云片、螺丝帽、SendCloud
    • 监控:云监控 / Nagios / Zabbix
    • 登录:微博 / 微信 / QQ / 推特 / 脸书 / Goodle
    • 支付:支付宝 / 微信 / 银联 / ApplePay / 翼支付
      • 支付集成:Ping++

物理架构:

  • 云服务器:VPC(内网)/ 跳板机(SSH)/ 反向代理(Nginx / 邮件服务器 / 静态资源)
    • Nginx / LVS / Squid / Vanish
  • 硬件采购:刀片服务器 / 电信机房(数据中心)托管

web应用工作流程:

你可能感兴趣的:(python全栈开发,git,flow,python,敏捷开发,项目架构)