一 类
在程序涉及中设计表格,我们称之为: 设计类
在程序中打印生产表格,我们称之为:创建对象
在填写表格, 我们称之为:对象属性赋值
1 .类的定义
#定义类
class 类名称:
类的属性 # 成员变量
类的行为 # 成员方法
#成员方法,在传入参数时,self是透明的
def 方法名(self, 形参1,...., 形参):
slef.成员变量
#创建类对象
对象 = 类名称()
案例
python
class Student:
name = None # 姓名
age = None # 年龄
def say_hi(self):
print(f"大家好我是{self.name}")
def say_msg(self, msg):
print(f"大家好我是{self.name}", msg)
student1 = Student()
student1.name = "aa"
student1.age = 15
student1.say_hi()
student1.say_msg("哎呦不错哦")
student2 = Student()
student2.name = "vbb"
student2.age = 18
student2.say_hi()
2. 构造方法
python 类中可以使用: init()方法,称之为构造方法,与js的constructor 相似
- 在创建时候,会自动执行
python
class Student:
name = None # 姓名
age = None # 年龄
def __init__(self, name, age):
self.name = name
self.age = age
def say_hi(self):
print(f"大家好我是{self.name}")
def say_msg(self, msg):
print(f"大家好我是{self.name}", msg)
student1 = Student("bb", "sasdsa")
3. 魔术方法 - python 类的内置方法
lt, eq, str, le
python
class Student:
name = None # 姓名
age = None # 年龄
def __init__(self, name, age):
self.name = name
self.age = age
def say_hi(self):
print(f"大家好我是{self.name}")
def say_msg(self, msg):
print(f"大家好我是{self.name}", msg)
#默认实例的对象 student 打印是 <__main__.Student object at 0x10fa6d6a0>
#写了这个方法后, student 打印 函数返回的值
def __str__(self):
return f"我的姓名是{self.name}, 我的年龄是{self.age}"
# 定义实例对象比较,可以直接进行比较(大于,小于),不定义比较对象会报错
def __lt__(self, other):
return self.age < other.age
# 定义实例对象比较,可以直接进行比较(大于等于,小于等于),不定义比较对象会报错
def __le__(self, other):
return self.age <= other.age
# 定义实例对象比较,可以直接进行比较(等于),不定义比较对象会报错
def __eq__(self, other):
return self.name == other.name
student1 = Student("vv", 15)
student2 = Student("vv", 13)
print(student2)
print(student1 > student2)
print(student1 < student2)
4. 封装
将现实的事物(属性,行为),封装到类中
以__ 开头定义的为私有变量 和 私有行为,不能对类对象使用,和
python
class Phone:
IMEI = None # 序列号
producer = None # 厂商
# 私有变量 __ 开头,不能被类对象使用,使用会报错
__curent__voltage = None #当前电压
#私有行为 _ 开头,不能被类对象使用,使用会报错
def __keep_sibg_core(self):
print("让cpu以单模式运行")
5. 继承
单继承
class 类名(父类名)
python
# 继承前面定义的Phone
class Phone2(phone):
face_id = True #面部识别
def call_by_5g(self):
print("最新5g通话")
多继承
class 类名(父类名1, 父类名2, ...)
如果父类有相同的属性和行为,先继承的优先级大于后继承的
python
class NFCReadr:
nfc_type = "第五代"
def red_card(self):
print("读卡")
class RemoteCotrol:
rc_type = "红外线"
def control(self):
print("开启")
class Phone(NFCReadr, RemoteCotrol):
# 子类什么都不写的时候,会报错,直接pass避免报错
pass
class Phone2(NFCReadr, RemoteCotrol):
# 复写,覆盖掉父类
nfc_type = "第五代NFC"
def read_card(self):
# 调用父类的成员变量 父类名.成员变量 | super().成员变量
nfc_type1 = NFCReadr.nfc_type
rc_type1 = RemoteCotrol.rc_type
print("读卡哦", nfc_type1, rc_type1)
子类调用 父类成员变量 & 成员方法
python
父类名.成员变量
父类名.成员方法(self)
super().成员变量
super().成员方法()
6. 多态
同样的行为(函数), 传入不同的对象,得到不同的状态
python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal)
def speak(self):
print("喵喵喵")
def make_nosie(animal: Animal)
animal.speak()
dog = Dog()
make_nosie(dog)
cat = Cat()
make_nosie(cat)
7. 抽象类
抽象类是指父类定义一个标准, 要求子类必须实现(主要是 用户顶层设计)
python
class AC:
def cool_wind(self):
pass
def hot_wind(self):
pass
class Meida:
def cool_wind(self):
pirnt("美的冷风")
def hot_wind(self):
pirnt("美的热风")
class Gree:
def cool_wind(self):
pirnt("格力冷风")
def hot_wind(self):
pirnt("格力冷风")
二 变量的类型注解
基本定义
python在3.5版本引入了类型注解,以方便静态类型检查工具,IDE等三方工具
类型注解: 在代码中涉及数据交互的地方,提供数据类型的注解(显示的说明)
主要功能:
- 帮助三方工具对类型推断,协助代码提示
- 帮助开放着自身对变量进行类型注释
语法
基本类型语法
1. 变量:类型
2. #type: 类型
python
#基本数据类型
var_1: int = 10
var_2: str = "xx"
var_3: bool = True
# 类对象
class Student:
pass
stu: Student = Student()
#基本容器类型注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_dic: dic = {"name": 33}
#详细注解
my_list1: list[int] = [1,2,3]
# tuple的详细注解,需要将每一个元素都标记出来
my_tuple1: tuple[int, str] = (1,"11")
# 字典key的类型, value的类型
my_dic1: dic[str, int] = {"name": 33}
my_list2 = [1,2,3] #type: list
my_tuple2: tuple = (1,"2") #type: tuple[int, str]
my_dic2: dic = {"name": 33} #type: dic[str,int]
注意: 一般在无法直接看出变量类型的时候,再去加上类型注解,类型注解不是强制性的
函数的形参注解
def 函数方法名(形参名:类型, 形参名:类型) -> 返回值类型:
python
def my_fuciton(a: int, b:int) -> int:
pirnt(a, b)
return a + b
Union联合类型的注解
如果数据类型比较多,使用Union进行类型注解
python
from typing import Union
mylist: list[Union[int, str]] = [1,2,3,"sa", "vvv"]
def func(data:Union[int, str]):
pirnt(data)
三 SQL
1. 数据库
库 -》表 -》 数据 三个在进行组织
常见的数据库软件:ORACLE ,MySql ,Sql Server,PostgreSQL, SQLite
2. MySql的安装
2.1 安装 MySql
下载链接:https://downloads.mysql.com/archives/installer
傻瓜式安装

2.2 设置环境变量
找到bin命令 
此电脑,右键-》属性



编辑。粘贴到bin所在的目录,确定
window+ r, 输入mysql -uroot -p,输入密码,检测安装和环境变量是否成功

2.3 下载MySql的图形化工具
3.SQL基础语法
- sql的大小写是不敏感的
- 以 ; 进行结束
- 支持注释
- 单行注释 : -- 注释内容(-- 后有个空格)
- 单行注释: # 注释内容(# 后的空格可加可不加)
- 多行注释: /* 注释内容 */
3.1 数据定义:DDL(Data Definition Language)
库的创建删除,表的创建删除等
sql
# 查看数据库
show databases;
# 使用数据库
use 数据库名称;
# 创建数据库 [可选参数]
create database 数据库名称 [charset utf-8];
#删除数据库
drop datebase 数据库名称;
#查看当前使用的数据库
select database();
#表的操作 - 先选择好一个库
# 查看有哪些表
show tables;
# 创建表
create table 表名称(
列名称 列类型,
列名称 列类型
...
)
create table sutdent(
id int,
name varchar(10),
age int
)
#删除表
drop table 表名称;
drop table if exists 表名称;
列类型的常用类型
- int -- 整数
- float -- 浮点数
- varchar(长度) -- 文本,长度为数字,做最大限制
- date -- 日期类型
- timestamp -- 时间戳类型
3.2 数据操作:DML(Data Manipulation Language)
用户对数据库中的标的数据记录进行更新
3.2.1 insert
sql
# insert 语句
# insert into 表[(列1, 列2, 列2...)] values(值1, 值2....)[, (值1, 值2, 值2)]
# 示例
create table student(
id int,
name varchar(20),
age int
)
# 插入3条数据,id分别为1,2,3; name和age 为null
insert into sudent(id) values(1),(2),(3)
# 插入id,name,age的2条数据,值分别对应
insert into student(id, name, age) values(1, "aa", 10), (2, "bb", 11)
3.2.2 delete
sql
# 语法 (=, < , > , >=, <=, !=)
delete form 表名称 [where 条件判断]
# 案例
drop table if exists student:
create table student(
id int,
name varchar(20),
age int
)
insert int student values(1, "aa", 10),(2, "bb", 11),(3, "cc", 11);
#删除name为aa的节点
delete from student where name = "aa";
#删除age > 10
delete from student where age > 10;
#删除整个表
delete from student;
3.2.3 upadte
sql
# 语法
update 表名 set 列=值 [where 条件判断]
# 案例
create table student(
id int,
name varchar(20),
age int
)
insert int student values(1, "aa", 10),(2, "bb", 11),(3, "cc", 11);
# 将所有数据的name都更新为ee
update student name="ee"
# 将id为1 的数据,年龄更新为11
update student age=11 where id = 1
3.3 数据查询:DQL(Data Query Language)
sql
#语法
selct 字段列表|* from 表
# 只看name,id列
select name, id form table
# 查询所有列
select * from table
# 查询age > 10的列
select * from table where age > 10
4. 分组聚合
分组聚合应用场景很多,如:统计班级中,男生和女生的人数,这种需求就需要
- 按照性别分组
- 统计每个组的人数
这就称之为 分组聚合
sql
# 语法
select 字段|聚合函数 from 表 [where 条件] group by 列
# 常见的聚合函数
sum(列) 求和
avg(列) 求平均值
min(列) 求最小值
max(列) 求最大值
count(列|*) 求数量
# 案例
select gender,avg(age) from student group by gender
# 1 根据gender进行分组
# 2 查出来的列为 gender , avg(age),
gender ave(age)
男 xxx
女 xxx
5. 结果排序
j将查询的结果,使用order by 在进行排序
sql
#语法
select 列|聚合函数|* from 表 where... group by... group by...[ASC|DESC]
#查询所有的sutdent字段,查询结果降序排序
select * from student order by age desc
#查询所有的sutdent字段&&年龄>10 && 查询结果降序排序
select * from student where age > 10 order by age desc
#语法
# 在限制条数,只传n,查询满足条件的n条
# 当传 2 个参数:LIMIT m, n → 表示 "跳过前 m 条记录,返回后面的 n 条记录"(这里你的 n 是返回行数,m 是偏移量)
select 列|聚合函数|* from 表 where... group by... group by...[ASC|DESC] limit n[, m]
四 python中sql的应用
使用第三方库 pymsql 来完成python中 对MySql的操作
sql
pip install pymysql
a安装成功后,开始进行测试
python
from pymysql import connection
# 获取MySql数据库链接对象
conn = Connection(
host = 'localhost',
port = 3306,
user = 'root',
password = '123456',
autocommit = true // 设置了这个, 那么案例三久不用再手动执行conn.commit()
)
print(conn.get_server_info())
#获取游标对象
cursor = conn.cursor()
# 选择数据库 案例一
#conn.select_db("test")
# 执行sql 创建表
#cursor.execute("create table test_pymysql(id int);")
# 案例二 获取某个列表
#conn.select_db("word")
#cursor.execute("select * from student")
# 执行sql后,results会是查询出列表的元祖
#results = cursor.fetchall()
#for r in results:
print(r)
# 操作修改数据库,需要进行commit在次确认才会写入数据库
conn.conn.select_db("word")
conn.execute("insert into student values(1001, "ss", 10)")
conn.commit()
# 关闭数据库链接
conn.close()
