09 2021 档案
摘要:FastAPI 的单元测试 对于服务端来说,通常会对功能进行单元测试,也称白盒测试 FastAPI 集成了第三方库,让我们可以快捷的编写单元测试 FastAPI 的单元测试是基于 Pytest + Request 的 Pytest 学习 https://www.cnblogs.com/poloyy/
阅读全文
摘要:安装 aiofiles pip install aiofiles 个人感想 现在都是前后端分离,感觉在 FastAPI 应用程序中直接使用静态资源的可能性不大,只做了解(也不难 使用 StaticFiles 访问静态资源 from fastapi import FastAPI from fastap
阅读全文
摘要:后台任务 顾名思义,可以在返回响应后运行后台任务 这对于需要在请求后执行特定的操作很有用,且客户端并不需要在接收响应之前等待该操作完成 常见的栗子 发送电子邮件通知,由于连接到电子邮件服务器并发送电子邮件往往会比较“缓慢”(几秒钟),因此可以立即返回响应并在后台发送电子邮件通知 假设您到一个必须经过
阅读全文
摘要:背景 假设要搭建一个测试平台,那么整个项目的 API 数量肯定很多个,他们不可能放在同一个文件中 FastAPI 提供了一个方便的工具来构建应用程序,同时保持所有的灵活性 项目架构 假设结构如下 . ├── app │ ├── __init__.py │ ├── main.py │ ├── depe
阅读全文
摘要:同源策略 https://www.cnblogs.com/poloyy/p/15345184.html CORS https://www.cnblogs.com/poloyy/p/15345871.html FastAPI 模拟跨域问题 https://www.cnblogs.com/poloyy/
阅读全文
摘要:同源策略 https://www.cnblogs.com/poloyy/p/15345184.html CORS https://www.cnblogs.com/poloyy/p/15345871.html 需要先了解什么是同源策略和 CORS 才能更好看懂这篇文章 目录结构 — root/ | |
阅读全文
摘要:什么是同源策略 https://www.cnblogs.com/poloyy/p/15345184.html 同源策略带来的跨域问题 在前后端分离的项目中,前端和后端如果部署在同一个服务器,那么运行端口肯定不一样 当前端发起请求到后端,这个时候发送的首先是 option 请求,而不是真正的请求 后端
阅读全文
摘要:同源策略 同源策略是一个重要的安全策略,它用于限制同一个 origin 的文档或者它加载的脚本如何能与另一个源的资源进行交互,它能帮助阻隔恶意文档,减少可能被攻击的媒介 Origin 源 源的组合 协议(http、https) 域(myapp.com、localhost、localhost.tian
阅读全文
摘要:什么是中间件 就是一个函数,它在被任何特定路径操作处理之前处理每个请求,且在每个 response 返回之前被调用 类似钩子函数 执行顺序 中间件会接收应用程序中的每个请求 Request 针对请求 Request 或其他功能,可以自定义代码块 再将请求 Request 传回路径操作函数,由应用程序
阅读全文
摘要:Metadata 元数据 可以给 API 添加元数据 实际栗子 #!usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy/ # time: 2021
阅读全文
摘要:管理外部资源的背景 在编程中会面临的一个常见问题是如何正确管理外部资源,例如文件、锁和网络连接 有时,程序会永远保留这些资源,即使不再需要它们,这种现象称为内存泄漏 因为每次创建和打开给定资源的新实例而不关闭现有资源时,可用内存都会减少 如何正确管理资源 正确管理资源通常是一个棘手的问题 它需要一个
阅读全文
摘要:什么是上下文管理器 官方解释... 上下文管理器是一个对象 它定义了在执行 with 语句时要建立的运行时上下文 上下文管理器处理进入和退出所需的运行时上下文以执行代码块 上下文管理器通常使用 with 语句调用,但也可以通过直接调用它们的实例方法来使用 一顿花里胡哨猛如虎,结果我也不太懂 简单一句
阅读全文
摘要:什么是 Context Manager 上下文管理器 在 Python 中,是可以在 with 语句中使用的任何 Python 对象,比如通过 with 来读取文件 with open("./somefile.txt") as f: contents = f.read() print(content
阅读全文
摘要:背景 FastAPI 支持在依赖项返回后执行一些额外的步骤 但需要用 yield 代替 return 来达到这一目的 版本要求 为了达到上述效果,需要使用 Python 3.7+ 或者在 Python 3.6 中安装 backports pip install async-exit-stack as
阅读全文
摘要:背景 对于某些实际应用场景,希望向整个应用程序添加一个全局依赖项 FastAPI 类的 dependences 参数 dependences 类型指定为 Optional[Sequence[Depends]] Sequence 是序列,不仅可以接收 List,还可以接收 Set、Tuple 等 子类
阅读全文
摘要:背景 在某些实际场景中,并不需要使用依赖项的返回值,或者依赖项没有返回值,但仍需要执行这个依赖项 针对这种场景,可以向路径操作装饰器的 dependencies 参数传入依赖项,而不使用 Depends() dependences 参数 dependences 类型指定为 Optional[Sequ
阅读全文
摘要:子依赖 就是嵌套依赖,和嵌套 Pydantic Model 差不多意思 可以根据需求创建多层嵌套的依赖关系 比如上图,E 依赖 C、D,C、D 又依赖 B,B 又依赖 A..... 两层依赖的栗子 第一层依赖 from typing import Optional # 1、第一层依赖 def que
阅读全文
摘要:依赖项函数返回 dict 上一篇依赖注入文章中讲的依赖项函数返回值类型是 dict #!usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy/ #
阅读全文
摘要:FastAPI 的依赖注入 FastAPI 有一个非常强大但直观的依赖注入系统 它被设计为非常易于使用,并且使任何开发人员都可以非常轻松地将其他组件与 FastAPI 集成 什么是依赖注入 在编程中,为保证代码成功运行,先导入或声明其所需要的【依赖】,如子函数、数据库连接等等 将依赖项的返回值注入到
阅读全文
摘要:jsonable_encoder 在实际应用场景中,可能需要将数据类型(如:Pydantic 模型)转换为与 JSON 兼容的类型(如:字典、列表) 比如:需要将数据存储在数据库中 为此,FastAPI 提供了一个 jsonable_encoder() 函数 jsonable_encoder 实际上
阅读全文
摘要:前言 许多情况下,需要向客户端返回一些特定的错误,比如 客户端没有足够的权限进行该操作 客户端无权访问该资源 客户端尝试访问的项目不存在 HTTPException 介绍 要将带有错误的 HTTP 响应(状态码和响应信息)返回给客户端,需要使用 HTTPException HTTPException
阅读全文
摘要:再次声明下,什么是路径操作 @app.get() @app.post() @app.put() @app.delete() ... 这些就是路径操作 那路径操作的配置,其实就是函数参数 为什么要讲配置 可以在 Swagger API 文档中显示这些参数,友好的显示相关信息 来看看有什么配置 resp
阅读全文
摘要:前言 详解 Form 详解 File 路径函数混合使用 Form、File from fastapi import FastAPI, File, Form, UploadFile app = FastAPI() @app.post("/files/") async def create_file(
阅读全文
摘要:前言 可以使用 FastAPI 提供的 File 定义客户端要上传的文件 学习 File 前最好先学习 Form:https://www.cnblogs.com/poloyy/p/15311533.html 安装 python-multipart 要用 File,需要先安装这个库 pip insta
阅读全文
摘要:前言 form-data 表单格式的请求数据其实也是挺常见的 FastAPI 通过 Form 来声明参数需要接收表单数据 安装 python-multipart 要用 Form,需要先安装这个库 pip install python-multipart Form Form 是继承自 Body,所以可
阅读全文
摘要:前言 有多个模型,且请求/响应需要声明多个模型的时候,可以根据不同使用场景结合 typing 库里面的 Union、List 来达到目的 Union 作用 联合类型,详细教程 使用 Union 时,建议首先包含具体的类型,然后是不太具体的类型 实际代码 #!usr/bin/env python #
阅读全文
摘要:前言 在一个完整的应用程序中,通常会有很多个相关模型,比如 请求模型需要有 password 响应模型不应该有 password 数据库模型可能需要一个 hash 加密过的 password 多个模型的栗子 需求 注册功能 请求输入密码 响应不需要输出密码 数据库存储加密后的密码 实际代码 #!us
阅读全文
摘要:前言 和指定响应模型一样,可以在任何路径操作中添加参数 status_code,用于声明响应的 HTTP 状态码 @app.get() @app.post() @app.put() @app.delete() 最简单的栗子 #!usr/bin/env python # -*- coding:utf-
阅读全文
摘要:前言 前面文章写的这么多路径函数最终 return 的都是自定义结构的字典 FastAPI 提供了 response_model 参数,声明 return 响应体的模型 什么是路径操作、路径函数 # 路径操作 @app.post("/items/", response_model=Item) # 路
阅读全文
摘要:查看一个接口的 Header 进到某个网站,右键检查元素;或者直接 F12 找到 Network,选择一个请求,就能看到 Request Header、Response Header 啦 FastAPI 提供的 Header Header 是 Path、Query、Cookie 的“姐妹”类 它也继
阅读全文
摘要:查看一个网站的 Cookies 进到某个网站,右键检查元素;或者直接 F12 找到 Application-Cookies 就能看到啦 FastAPI 提供的 Cookie Cookie 是 Path 和 Query 的“姐妹”类 它也继承自相同的通用 Param 类 注意:从 fastapi 导入
阅读全文
摘要:常见的数据类型 int float str bool 但 FastAPI 支持使用更复杂的数据类型 仍然能得到 FastAPI 的支持 IDE 智能提示 请求数据的数据类型转换 响应数据的数据类型转换 数据验证 自动注释和文档 复杂的数据类型 UUID 常见的唯一标识符 str 类型 datetim
阅读全文
摘要:前言 FastAPI 可以给 Pydantic Model 或者路径函数声明需要接收的请求示例,而且可以显示在 OpenAPI 文档上 有几种方式,接下来会详细介绍 Pydantic 的 schema_extra 可以使用 Config cass 和 schema_extra 为 Pydantic
阅读全文
摘要:带有类型参数的字段 Python 有一种特定的方法来声明具有内部类型或类型参数的列表 其实前面都见过,就是 List[str] Set[str] Tuple[str] Dict[str, int] List、Set、Tuple、Dict 都是从 typing 模块中导入的 typing 常见类型提示
阅读全文
摘要:背景 from pydantic import BaseModel, EmailStr class UserIn(BaseModel): username: str password: str email: EmailStr full_name: Optional[str] = None 定义的 P
阅读全文
摘要:前言 前面讲了 Query、Path、Body,均可以对某个字段进行额外的校验和添加元数据 这一篇来讲 Fields,它针对 Pydantic Model 内部字段进行额外的校验和添加元数据 Fields 它是 Pydantic 提供的方法,并不是 FastAPi 提供的哦 该方法返回了一个实例对象
阅读全文
摘要:背景 在一个 Python 模块中,如果包含两个同名的 Pydantic Model,访问 /docs 会报错哦 from typing import Optional import uvicorn from fastapi import Body, FastAPI, from pydantic i
阅读全文
摘要:使用 typing 中的 List、Set、Tuple 的栗子 from typing import Optional import uvicorn from fastapi import FastAPI, Body from typing import List, Tuple, Set app =
阅读全文
摘要:前言 上一篇有讲到将参数类型指定为 Pydantic Model,这样 FastAPI 会解析它为一个 Request Body 那单类型(int、float、str、bool...)参数可以成为 Request Body 的一部分吗?答案是可以的 通过 Body 函数即可完成,和 Path、Que
阅读全文
摘要:Path、Query、Request Body 混合使用 from fastapi import FastAPI, Path, Query from typing import Optional from pydantic import BaseModel import uvicorn app =
阅读全文
摘要:前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和元数据,Path 库 Path 可以为路径参数添加额外的校验和元数据,跟 Query 的参数是一毛一
阅读全文
摘要:前言 接口传参方式之一:通过发送请求体(Request Body)来传递请求数据 在 FastAPI,提倡使用 Pydantic 模型来定义请求体 这篇文章会详细讲不使用 Pydantic 和 使用 Pydantic 发送请求体的栗子 注意 请求体并不是只有 POST 请求有,只不过 POST 更常
阅读全文
摘要:可选参数 上一篇文章讲过查询参数可以不是必传的,可以是可选参数 from fastapi import FastAPI from typing import Optional import uvicorn app = FastAPI() # 必传参数+可选参数 @app.get("/items")
阅读全文
摘要:什么是查询参数? http://127.0.0.1:8000/get?name=xxx&age=18 http://127.0.0.1:8000/get?age=18&name=xxx 在 url 的 ? 后面跟着的一组或多组键值对,就是查询参数 FastAPI 的查询参数 当声明了不属于路径参数以
阅读全文
摘要:什么是路径 假设一个 url 是: http://127.0.0.1:8080/items/abcd 那么路径 path 就是 /items/abcd 路径参数 就是将路径上的某一部分变成参数,可通过请求传递,然后 FastAPI 解析 最简单的栗子 import uvicorn from fast
阅读全文
摘要:Uvicorn 基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器 它不是一个 Web 框架,而是一个服务器 例如,它不是一个提供路径路由的框架,这是 FastAPI 框架提供的东西 它是 Starlette 和 FastAPI 的推荐使用的服务器 总结 uvicorn
阅读全文
摘要:WSGI wiki 上的解释 Web Server Gateway Interface Web 服务器网关接口 是为 Python 定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口 WSGI 的问题 随着移动网络的发展,Web 技术也在升级,比如 WebSocket、HTT
阅读全文
摘要:常见触发错误的情况 如果传入的字段多了会自动过滤 如果传入的少了会报错,必填字段 如果传入的字段名称对不上也会报错 如果传入的类型不对会自动转换,如果不能转换则会报错 错误的触发 pydantic 会在它正在验证的数据中发现错误时引发 ValidationError 注意 验证代码不应该抛出 Val
阅读全文
摘要:pyproject.toml 文件 tool.poetry 是最基本的section,然后它由多个 sections 组成 name package 名字,必填 version package 版本号 ,必填 description package 描述 ,必填 license package 许可
阅读全文
摘要:啥是依赖规范 可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束 版本约束 ^ 约束 编写规范允许的版本范围 ^1.2.3 >=1.2.3 <2.0.0 ^1.2 >=1.2.0 <2.0.0 ^1 >=1.0.0 <2.0.0 ^0.2.3 >=0.2.3 <0.3.
阅读全文
摘要:config 命令 poetry 通过 config 命令进行配置 也可以直接在 config.toml 文件中进行配置,该文件将在首次运行该命令时自动创建 文件目录 macOS:~/Library/Application Support/pypoetry Windows: C:\Users\<us
阅读全文
摘要:环境隔离 poetry 核心之一:使项目环境隔离,意味着始终和本地全局 Python 环境隔离 poetry 首先会检查当前项目是否在虚拟环境中运行:如果是将直接使用它,而不创建新的;如果不是,poetry 将使用它已创建的或创建一个全新的虚拟环境 默认情况下,poetry 将尝试使用当前激活的 P
阅读全文
摘要:poetry 语法格式 poetry [-h] [-q] [-v [<...>]] [-V] [--ansi] [--no-ansi] [-n] <command> [<arg1>] ... [<argN>] 全局 options --verbose (-v|vv|vvv):增加消息的详细程度:“-
阅读全文
摘要:Python 虚拟环境详解 https://www.cnblogs.com/poloyy/p/15266382.html poetry 官方介绍 github:https://github.com/python-poetry/poetry 文档(要🪜):https://python-poetry.
阅读全文
摘要:什么是虚拟环境 这是 Python 3.3 的新特性:https://www.python.org/dev/peps/pep-0405/ 假设自己电脑主机的 Python 环境称为系统环境,而默认情况下,虚拟环境和系统环境是完全隔离的 每个系统环境下可以有多个虚拟环境 每个虚拟环境都有自己的 Pyt
阅读全文
摘要:安装 FastAPI pip install fastapi # 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器 pip install uvicorn 最简单的代码栗子 from fastapi import FastAPI app = FastAPI() @app.get(
阅读全文
摘要:简单的栗子 class User(BaseModel): id: int # 必填字段 name: str = "小菠萝" # 有默认值,选填字段 signup_ts: Optional[datetime] = None friends: List[int] = [] # 列表中元素是 int 类型
阅读全文
摘要:为什么要讲 __dict__ 在 Python 类的内部,无论是类属性、实例属性、实例方法、类方法、静态方法,都是以字典的形式进行存储的,其中属性名作为键,而值作为该键对应的值 为了方便查看类包含了哪些属性、方法,就可以使用类提供的 __dict__ 属性,记住是一个属性,不是方法来的 单继承的栗子
阅读全文
摘要:什么是反射 反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) Python 面向对象中的反射 通过字符串的形式操作对象的属性 Python 中一切皆为对象,所以只要是对象都可以使用反射 比如:实例对象、类对象、本模块、其他模块
阅读全文
摘要:前言 Jmeter 也是测试必备技能之一了,无论是接口自动化测试、性能测试 使用教程 入门介绍篇 Jmeter系列(1)- 环境部署 Jmeter系列(2)- Jmeter的详细介绍 Jmeter系列(3)- Jmeter安装目录介绍 Jmeter系列(4)- Jmeter面板介绍 Jmeter系列
阅读全文
摘要:前言 Docker 也越来越重要了..必须单独的一篇文章来放学习路线 卷起来!! 常用命令 Docker 命令大全 使用教程 什么是 Docker Centos 7.x 下安装 Docker Centos 7.x 下 Docker 镜像加速配置 注册 docker hub 的账号 如何修改 dock
阅读全文
摘要:前言 感觉 Git 还是很重要,应该单独开一篇文章来讲 Git... 使用系列教程 Git 系列教程(1)- Git 简介 Git 系列教程(2)- Git 安装 Git 系列教程(3)- 初次运行 Git 前的配置 Git 系列教程(4)- 获取 Git 仓库 Git 系列教程(5)- 记录每次更
阅读全文
摘要:前言 会分三大部分吧:Mysql、Redis、MongoDB 卷起来了...测试竟然要会三种数据库... Redis 基本没写,只能看后面用起来再详细写了 Mysql 常用语句 Mysql常用sql语句(1)- 操作数据库 Mysql常用sql语句(2)- 操作数据表 Mysql常用sql语句(3)
阅读全文
摘要:前言 这篇文章会一直更新...只是将个人的文章总结归纳到这,不代表最佳学习路线 没有链接的文章后续会补上...还没写的知识点未来用到也会补上...太卷了 常用基础命令 Linux常用命令 - cd命令详解 Linux常用命令 - mkdir命令详解 Linux常用命令 - mv命令详解 Linux常
阅读全文
摘要:前置准备:虚拟机安装以及配置相关 包含安装 centos7、8 虚拟机、设置静态 ip 等 https://www.cnblogs.com/poloyy/category/1703784.html 注意:我用的是 centos 7 官方安装教程 https://about.gitlab.com/in
阅读全文
摘要:1. 云原生概述 1.1 云原生背景 1.2 云原生定义 2. 云原生基础 2.1 云计算基础设施 2.2 云网络基础设施 2.3 云存储基础设施 3. 云原生技术 3.1 容器 3.1.1 Docker 3.1.2 Pouch 3.1.3 Kata 3.1.4 CRI 3.2 Kubernetes
阅读全文
摘要:前言 这其实是将自己写的文章进行一个总结分类,并不代表最佳学习路线 会不断更新这篇文章...没链接的文章正在编写ing...会不会哪天我的这个目录就出现在培训机构的目录上了... 目前实战比较少(要是有多点实战,我就开培训了哈哈哈) 再次强调!没有写的内容不代表不用学哈!这里只是将自己写的进行一个归
阅读全文
摘要:需求 设计一个培训机构管理系统,有总部、分校,有学员、老师、员工,实现具体如下需求: 有多个课程,课程要有定价 有多个班级,班级跟课程有关联 有多个学生,学生报名班级,交这个班级对应的课程的费用 有多个老师,可以分布在不同校区,上不同班级的课 有多个员工,可以分布在不同校区,在总部可以统计各校区的账
阅读全文
摘要:什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.cnblogs.com/poloyy/p/15236309.html __init__ https:/
阅读全文
摘要:__call()__ 的作用 使得类实例对象可以像普通函数那样被调用 实际栗子 from typing import Callable class PoloBlog: def __init__(self, name): self.name = name def __call__(self, *arg
阅读全文
摘要:总的来说 str():将传入的值转换为适合人阅读的字符串形式 repr():将传入的值转换为 Python 解释器可读取的字符串形式 传入整型 # number resp = str(1) print(resp, type(resp), len(resp)) resp = str(1.1) prin
阅读全文
摘要:为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print 实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也
阅读全文
摘要:eval 是干嘛的? 解析字符串表达式并执行,并返回一个值 语法格式 eval(expression[, globals[, locals]]) expression:表达式字符串 globals:必须是一个字典 locals:可以是任何 map 对象 最简单的表达式栗子 栗子一 print(eva
阅读全文
摘要:单例模式 这是一种设计模式 设计模式是前任工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性 单例设计模式 目的:让某一个类创建的实例对象,在整个应用程序中只有唯一的一个实例对象而且该对象易于外界
阅读全文
摘要:super() 详解 https://www.cnblogs.com/poloyy/p/15223443.html 多继承中使用 super() class A: def test(self): print("AAA") class B: def test(self): print("BBB") c
阅读全文
摘要:前言 主要是针对静态方法、类方法、实例方法、类属性、实例属性的混合实战 需求 设计一个 Game 类 属性 定义一个类属性 top_score 记录游戏的历史最高分,这个属性很明显只跟游戏有关,跟实例对象无关,所以定义为类属性 定义一个实例属性 player_name 记录当前游戏的玩家姓名 方法
阅读全文
摘要:为什么会讲 MRO? 在讲多继承的时候:https://www.cnblogs.com/poloyy/p/15224912.html 有讲到, 当继承的多个父类拥有同名属性、方法,子类对象调用该属性、方法时会调用哪个父类的属性、方法呢? 这就取决于 Python 的 MRO 了 什么是 MRO MR
阅读全文
摘要:前置知识 封装 详解文章:https://www.cnblogs.com/poloyy/p/15203989.html 封装根据职责将属性、方法封装到一个抽象的类中 定义类的准则-封装 继承 详解文章:https://www.cnblogs.com/poloyy/p/15216652.html 继承
阅读全文
摘要:前置知识 继承的详解:https://www.cnblogs.com/poloyy/p/15216652.html 子类方法的重写:https://www.cnblogs.com/poloyy/p/15221352.html 多继承的详解:https://www.cnblogs.com/poloyy
阅读全文
摘要:继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 这篇文章讲的都是单继承,Python 中还有多继承 Python 多继承的背景 大部分面向对象的编程语言,都只支持单继承,即子类有且只能有一个父类 而 Python 却支持多继承(C++也支持多
阅读全文
摘要:object object 是 Python 为所有对象提供的父类,默认提供一些内置的属性、方法;可以使用 dir 方法查看 新式类 以 object 为父类的类,推荐使用 在 Python 3.x 中定义类时,如果没有指定父类,会默认使用 object 作为该类的父类 所以 Python 3.x
阅读全文
摘要:继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 方法的重写 在子类继承父类时,子类会拥有父类的所有属性和方法 但当父类的方法实现不满足子类需要时,子类可以对方法进行重写,也叫 override 重写父类方法的两种情况 覆盖父类的方法 对父类方
阅读全文
摘要:继承 继承也是面向对象编程三大特性之一 继承是类与类的一种关系 定义一个新的 class 时,可以从某个现有的 class 继承 新的 class 类就叫子类(Subclass) 被继承的类一般称为父类、基类、超类 通俗理解:子类与父类的关系,即爸爸与儿子,爸爸有了个儿子,儿子继承爸爸的属性和方法,
阅读全文