Python入门学习二

一 类

在程序涉及中设计表格,我们称之为: 设计类

在程序中打印生产表格,我们称之为:创建对象

在填写表格, 我们称之为:对象属性赋值

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的图形化工具

https://dbeaver.io/download

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()
相关推荐
谷晓光2 年前
python第九节:类的使用(3)
开发语言·python··类的继承·python的类