第二阶段-第一章
3.类和对象
class clock:
ID=None
price=None
def ring(self):
import winsound
winsound.Beep(2000,3000)
clock1=clock()
clock.ID="006632"
clock.price=19.99
print(f"闹钟ID为{clock.ID},闹钟价格为{clock.price}")
定义他的属性,并作出相应工作
注意:定义的ring是一个函数,最后要调用才能使得发出声音,clock.ring()
面向对象编程是设计类,基于类创建对象,并使用对象来完成具体的工作。
4.构造方法(可以使得代码更加简单高校)
1._init_()方法是构造方法。
构造方法可以实现:1.在创建类对象(构造类)的时候,会自动执行。
2.在创建类对象(构造类)的时候。将传入参数自动传递给_init_方法使用。
2.构造方法运用示例
class Student:
name=None
age=None
tel=None
def __init__(self,name,age,tel):
self.name=name
self.age=age
self.tel=tel
print("Studebt类创建了一个类对象")
stu =Student("周杰伦",31,"131115955018")
print(stu.name)
print(stu.age)
print(stu.tel)
运行结果:周杰伦
31
13111595018
注意: 成员变量的定义不写也没事,因为__init__语句会自动执行(下边赋值了)
3.构造方法的注意事项
1.构造方法的名称是__init__前后都有两个下划线
2.构造方法也是成员方法,要在参数列表中提供self关键字。
3.在构造方法内定义成员变量,需要使用self关键字
如:
def __init__(self,name,age,tel): self.name=name self.age=age self.tel=tel
4.相关例题(已自己运行出结果)
class Student:
name = None
age = None
address = None
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address
for i in range(1,11):
print(f"当前录入第{i}位学生信息,总共需要录入10位学生信息")
name=input("请输入学生姓名:")
age=input("请输入学生年龄:")
address=input("请输入学生地址:")
stu=Student(name=name,age=age,address=address)
print(f"学生{i}信息录入完成,信息为:[学生姓名:{stu.name},学生年龄:{stu.age},地址:{stu.address}]")
注意 :1.不知道为什么input函数在这个代码中只能输入英文而不能输入中文
2. 此题要注意是循环第{i}位
5.其他内置方法
1.魔术方法
1.__init__构造方法(上述已总结)
2.__str__字符串方法(控制类转换为字符串的行为)
class Student:
def __init__(self,name,age):
self.name=None
self.age=None
def __str__(self):
return f"Student类对象,name={self.name},age={self.age}"
student=Student("周杰伦",11)
print(student)
注意:未使用__str__之前输出的是内存地址。
主要是是内存地址直接转换为字符串
3.__lt__小于,大于符号比较(严格来说用于小于符号的比较的)
直接对两个对象进行比较是不可以的,但是在类中用__lt__方法可同时完成小于符号和大于符号的比较。
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def __lt__(self,other):
return self.age<other.age
stu1=Student("周杰伦",31)
stu2=Student("林俊杰",33)
print(stu1<stu2)
引用__init__可以进行比较输出结果为布尔型。
补充:__le__用于小于等于/大于等于运算符
4.__eq__ ==符号比较(进行是否相等判断的)
class Student:
def __init__(self,name,age):
self.name=name
self.age=age
def __lt__(self,other):
return self.age<other.age
def __eq__(self,other):
return self.age==other.age
stu1=Student("周杰伦",31)
stu2=Student("林俊杰",33)
print(stu1<stu2)
print(stu1==stu2)
注意:若没有引入__eq__进行比较,结果为False 因为比较的是内存地址,地址肯定不一样。
6.封装
1.定义:将现实世界事物封装到程序内部
2.使用私有成员
1.只要在类中设计了私有的成员,获取了这个类对象就没有办法去使用这些私有的成员变量
使用__开头
2.私有变量是无法打印的
3.私有成员对于类对象来说没有办法直接使用,但可以被其他成员(内部)使用。
例:
3.私有成员的意义:
在类中提供仅供内部使用的属性和方法而不对外开放(类对象无法使用)
4.封装的课后练习
class phone:
__is_5g_enale=True
def __check_5g(self):
if self.__is_5g_enale:
print("5g开启")
else:
print("5g关闭,使用4g网络")
def call_by_5g(self):
self.__check_5g()
print("正在通话中")
phone =phone()
phone.call_by_5g()
7.继承的基础语法
1.语法:
class 类名(父类名)
类内容体
继承分为多继承和单继承
2.继承的单继承举例
class phone:
IMEI ="天才帅涵"
producer ="HM"
def call_by_5g(self):
print("4g通话")
class phone2022(phone):
face_id="10001"
def call_by_5g(self):
print("2022新功能5g")
phone=phone2022()
print(phone.IMEI)
3.多继承语法及举例
1.语法:
class类名(父类1,父类2,....父类N)
类内容体
2.举例
class Parent1:
def method1(self):
print("This is method 1 from Parent1")
class Parent2:
def method2(self):
print("This is method 2 from Parent2")
class Child(Parent1, Parent2):
def method3(self):
print("This is method 3 from Child")
if __name__ == "__main__":
child = Child()
child.method1()
child.method2()
child.method3()
补充:pass关键字用来补充语法,不用去以填充了,显示无内容,空的意思。
注意:多个父类中,有同名的成员,按照从左到右的先来。
8.复写(子类继承父类后不满意,进行复写)
对谁不满意,在子类中重新定义即可)
1.例子
class phone:
IMEI ="天才帅涵"
producer ="HM"
def call_by_4g(self):
print("4g通话")
class phone111(phone):
producer="丁泽涵"
def call_by_4g(self):
print("5g通话")
phone=phone111()
print(phone.producer)
2.调用父类同名成员
调用父类成员:使用成员变量:父类名.成员变量 或用super().成员方法
父类名.成员方法(self)
9.类型注解
1.pycharm无法通过代码确定传入什么类型,需要类型注释
2.支持注解类型:
1.变量的类型注解
基础语法:变量:类型 例:www: int=10 stu:student =student()
也可以对列表、元组、字典等进行注解(可以简易,可以详细)。例: my_list:list=[1,2,3]tuple
函数(方法)形参列表和返回值的类型注解
注意:1.元组类型设置类型详细注释,需要将每一个元素都标记出来。
例如:my_tuple:tuple[str,int,bool]=("itheima",666,True]
2.字典类型设置类型详细注释,需要两个类型,第一个是key,第二个是value
3.也可以在代码后注释里边标记是什么类型。
4.类型注解是提示性的不是决定性的功能。
2.函数(方法)的类型注解-形参
1.语法:def 函数方法名(形参名:类型,形参名:类型,....)
def add(x:int,y:int): return x+y add() 按下ctrl+p会提示输入两个整数
对返回值注解:def 函数名(形参:类型....)-> 类型:
3.Union类型联合注解(需要导包)
from typing import Union
my_list:list[union[int,str]]=[1,2,"itheima"] #对变量的联合注解
def func(data:union[int,str]) ->union[int,str]: #对函数形参的联合注解
pass
10多态(使用不同对象得到不同状态)
抽象类的作用
多用于做顶层设计(设计标准),以便子类做具体实现。
也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法
并配合多态使用,获得不同的工作状态。
第二阶段-第二章
1.SQL章节前言
任何编程语言都会用到SQL,本章只学习入门
2.数据库(存储数据)
1.SQL语言就是一种对数据库、数据进行操作、管理查询的工具
2.三个层次:库、表、数据三个组织来完成数据存储
3.Mysql安装官网(www.mysql.com)
安装后需要配置环境变量
4.mysql的入门
1.show databases 查看数据库
2.use 数据库 使用数据库
3.show tables 查看数据库有哪些表
4.exit 推出Mysql的命令行环境
5.SQL基础与DDL
SQL语言是操作数据库的专用工具
1.SQL的语法特征
SQL语言大小写不敏感,可以单行或多行书写,最后以;结束,SQL支持注释
注意:单行注释是-- 有个空格
2.DDL库管理
1.查看数据库:show databases;
2.使用数据库:use 数据库名称;
3.创建数据库:create database;
4.删除数据库:droop database 数据库名称;
5.查看当前使用的数据库:select database();
3.DDL表管理
1.查看有哪些表:show tables;
2.创建表:create table 表名称(
列名称 列类型,
列名称 列类型,
....
);
3.删除表:drop table 表名称; / drop table if exists 表名称
注意 :一定要看好是在哪个库进行创建的SQL !!!
6. SQL-DML相关语法
1.数据插入
insert into 表【(列1,列2,...)】values(值1,值2....)[(值1,值2....),(值1,值2...)]
create table student(
id int,
name varchar(10),
age int
);
insert into student (id)values(1),(2),(3);
insert into student(id,name,age) values(4,'周杰伦',31),(5,'丁泽涵',18),(6,'柳泽咸猪手',65);
运行结果:
注意:(id,name,age)可以不用写
2.数据删除
delete from 表名称 [where 条件判断];
delete from student where id <4;
3.数据更新
update 表名称 set 列=值[where条件判断];
update student set name='张学友'where id=5;
注意:1.where 条件判断是去锁定哪一个位置
2.字符串出现在SQL,必须用单引号包围起来
7. SQL-DQL相关语法
1.基础查询语法:select 字段列表/* from 表 *代表是所有是通配符
2.过滤查询的语法:select 字段列表/* from 表 where 条件判断
select id,name,age from student;
select *from student where age>30;
3.分组聚合:
SELECT 字段|聚合函数 FROM 表 [ WHERE条件] GROUP BY 列
聚合函数有:
- SUM(列)求和
AVG(列)求平均值
MIN(列)求最小值
MAX(列)求最大值
COUNT(列|*)求数量
注意:1.一个SQL中可以有多个分组聚合
2.group by 中出现了哪个列,哪个列才能出现在select中的非聚合中。
select id ,name,avg(age) from student group by name;
id是多余的
4. 对查询结果排序(order by 是用来排序的)
select *from student where age>20 order by age asc;
-- asc是升序/desc是降序
对查询结果进行数量限制或者分页显示:
SELECT 列|聚合函数|* FROM 表
WHERE ...
GROUP BY...
ORDER BY... [ASC | DESC]
LIMIT n[, m] 这是表示从第n个元开始,向后去取m个元素
8.python操作MYSQL
1.在pycharm中创建MYSQL表
from pymysql import Connection
conn=Connection (
host="localhost",
port=3306,
user="root",
password="123456dzh9080"
)
print(conn.get_server_info())
cursor=conn.cursor() #获取游标对象
conn.select_db("test") #选择数据库
cursor.execute("create table test_pymysql (id INT);")
conn.commit()
conn.close()
2.获取链接对象
from pymysql import Connection 导包
Connection(主机、端口、账户、密码)即可得到链接对象
链接对象.close()关闭和MYSQL数据库的连接
3.执行SQL查询
游标对象.exexute()执行SQL语句
4.数据插入
通过代码去确认这种更改行为
链接对象.commit() 手动确认
autocommit=True 设置自动提交 在构建链接对象时插入