文章目录
面向对象编程
初识对象
还是类
还是熟悉的class
# 设计一个类(类比生活中:设计一张登记表)
class student:
name = None #记录学生姓名
gender = None #记录学生性别
nationality = None #记录学生国籍
native_place = None #记录学生籍贯
age = None #记录学生年龄
# 2.创建一个对象(类比生活中:打印一张登记表)
stu_1 = Student()
#3.对象属性进行赋值(类比生活中:填写表单)
stu_1.name ="林军杰"
stu_1.gender ="男"
stu_1.nationality = "中国"
stu_1.native_place = "山东省"
#4.获取对象中记录的信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)
类的定义和使用
class 类名称: # class是关键字,表示要定义类了
类的属性 # 类的属性,即定义在类中的变量(成员变量)
类的行为 # 类的行为,即定义在类中的函数(成员方法)
创建类对象的语法:
对象 = 类名称()
类中
- 不仅可以定义属性用来记录数据
- 也可以定义函数,用来记录行为
其中: - 类中定义的属性(变量),我们称之为:成员变量
- 类中定义的行为(函数),我们称之为:成员方法
在类中定义成员方法和定义函数基本一致,但仍有细微区别:
def 方法名(self, 形参1 , ......., 形参N):
方法体
self关键字是成员方法定义的时候,必须填写的。
感觉用起来有点像this指针,但是python的使用是必须加上self,而其他的都是半默认的
- 它用来表示类对象自身的意思
- 当我们使用类对象调用方法的时候,self会自动被python传入
- 在方法内部,想要访问类的成员变量,必须使用self
self关键字,尽管在参数列表中,但是传参的时候可以忽略它。
class Student:
name = None
def say_hi(self):
print( "Hello 大家好")
def say_hi2(self, msg) :
print(f"Hello大家好,{msg}")
stu = Student()
stu.say_hi() #调用的时候无需传参
stu.say_hi2("很高兴认识大家") #调用的时候,需要传msg参数
类和对象
对于类的定义,我觉得还是看自己的理解比较好
https://blog.youkuaiyun.com/yjnlovepy/article/details/130955428?spm=1001.2014.3001.5502
简单记一下看课讲的东西(感觉对俺来说没啥用,防止自己睡着)
1、现实世界的事务由什么组成?
- 属性
- 行为
类也可以包含属性和行为,所以使用类描述现实世界事物是非常合适的。
2、类和对象的关系是什么?
类是程序中的“设计图纸”
对象是基于图纸生产的具体实体
3、什么是面向对象编程?
面向对象编程就是,使用对象进行编程。
即,设计类,基于类创建对象,并使用对象来完成具体的工作
构造方法
Python类可以使用:__init__()
方法,称之为构造方法
可以实现:
- 在创建类对象(构造类)的时候,会自动执行。
- 在创建类对象(构造类)的时候,将传入参数自动传递给
__init__()
方法使用。
class Student:
name = None
age = None
tel = None
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
print("Student类创建了一个对象")
stu = Student("优降宁", 31, "2132173")
- 构建类时出传入的参数会自动提供给
__init__()
方法 - 构建类的时候__init__()方法会自动执行
- 构造方法也是成员方法,不要忘记在参数列表中提供:self
- 在构造方法内定义成员变量,需要使用self关键字
1、构造方法的名称是:
__init__
,注意init前后的两个下划线符号
2、构造方法的作用:
- 构建类对象的时候会自动运行
- 构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值
3、注意事项:
- 构造方法不要忘记self关键字
- 在方法内使用成员变量需要使用self
魔术方法(听起来很amazing)
__init__
构造方法,是Python类内置的方法之一。(二三十个之多)
有点类似于c++里面的运算符重载,但是这边的类之间的比较更加广泛(可以不同类的对象之间比较,虽然都是false)
__str__
字符串方法
当类对象需要被转换为字符串之时,会输出它的地址值
内存地址没什么用处,所以__str__
就是帮助我们将控制类转换为字符串
__lt__
小于符号比较方法
直接对2个对象进行比较是不可以的,但是在类中那个实现__lt__
方法,即可同时完成:小于符号和大于符号两种比较
- 方法名:
__lt__
- 传入参数:other,另一个类对象
- 返回值:True或False
- 内容:自行定义
__lt__
小于等于比较符号方法
魔术方法:__le__
可用于:<=、>=两种比较运算符上。
__eq__
比较运算符实现方法
- 不实现
__eq__
方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是false结果。 - 实现了
__eq__
方法,就可以按照自己的想法来决定2个对象是否相等了。
class student:
def _init__(self,name,age):
self.name = name
self.age = age
def __eq__(self,other):
return self.age == other. age
stu1 = student("周杰轮",11)
stu2 = student("林军杰",11)print(stu1 == stu2)#结果:True
- 方法名:
__eq__
- 传入参数:other,另一个类对象
- 返回值:True或False
- 内容自定义
封装
封装表示的是,将现实世界事物的
- 属性
- 行为
封装到类中,描述为 - 成员变量
- 成员方法
从而完成程序对现实世界事物的描述
访问权限
私有
类中提供了私有成员的形式来支持
- 私有成员变量
- 私有成员方法
定义私有成员的方式非常简单,只需要
- 私有成员变量:变量名以__开头(两个下划线)
- 私有成员方法:方法名以__开头(两个下划线)
继承
继承分为单继承和多继承
单继承
class Phone:
IMEI = None #序列
producer = None #厂商
def cal1_by_4g(self):
print("4g通话")
class Phone2022 (Phone):
face_id = True #面部识别.
def cal7_by_5g(self):
print("2022最新5g通话")
多继承
class 类名(父类1, 父类2, ......, 父类N):
类内容体
多继承注意事项
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。
即:先继承的保留,后继承的被覆盖
pass关键字
pass是占位符,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
先定义后声明
复写
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。
即:在子类中重新定义同名的属性或方法即可。
class Phone:
IMEI = None #序列号
producer = "ITCAST" #厂商
def cal1_by_5g(se1f):
print("父类的5g通话")
class MyPhone(Phone):
proucer = "ITHEIMA" #复写父类属性
def cal1_by_5g(self): #复写父类方法
print("子类的5g通话")
调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
# 第一种
父类名.成员变量 # 使用成员变量
父类名.成员方法 # 使用成员方法
# 第二种
super().成员变量 # 使用成员变量
super().成员方法() # 使用成员方法
类型注解
类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)主要功能:
- 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
- 帮助开发者自身对变量进行类型注释
支持:
- 变量的类型注解
- 函数(方法)形参列表和返回值的类型注解
变量的类型注解
为变量设置类型注解
# 基础语法
变量:类型
注意:
- 元组类型设置类型详细注解,需要将每一个元素都标记出来
- 字典类型设置类型详细注解,需要两个类型,第一个是key,第二个是value
出了使用变量:类型,也可以在注视中进行类型注解。
type:类型
类型注解的主要功能在于:
- 帮助第三方IDE工具对代码进行类型判断,协助做代码提示
- 帮助开发者自身对变量进行类型注释(备注)
并不会真正的对类型做验证和判断。
也就是说,类型注解仅仅是提示性的,不是绝对性的。
函数和方法类型注解
# 函数和方法的形参类型注解语法
def 函数方法名(形参名:类型, 形参名:类型, ......):
pass
函数(方法)的返回值也是可以添加类型注解的。
def 函数方法名(形参: 类型 , ......., 形参: 类型) -> 返回值类型:
pass
Union
Union[类型,......, 类型]
可以定义联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。
多态
多态指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的结果
同样的行为(函数),传入不同的对象,得到不同的状态
python操作mysql
在Python中,使用第三方库:pymysql来完成对MySQL数据库的操作。
- 连接mysql并输出版本号
from pymysql import Connection
conn = Connection(
host="localhost",
port=3306,
user="root",
password="root"
)
print(conn.get_server_info())
conn.close()
1、如何获取链接对象?
from pymysql import Connection
导包Connection(主机,端口,账户,密码)
即可得到链接对象链接对象.close()
关机和MySQL数据库的连接
2、如何执行SQL查询
通过连接对象调用cursor()方法,得到游标对象
游标对象.execute()
执行SQL语句游标对象.fetchall()
得到全部的查询结果封装入元组内
数据插入
pymysql在执行数据插入或其他产生数据更改的SQL语句时,默认时需要提交更改的,即,需要通过代码“确认”这种更改行为。
通过**链接对象.commit()**即可确认此行为。
自动commit设置
如果不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性
conn = Connection(
host="localhost", #主机名(IP)
port=3306, #端口
user="root", #账户
password="12345f, #密码
autocommit=True #设置自动提交
秃头学习ing