Python第二阶段笔记

本文介绍了Python的面向对象编程概念,包括类的定义、对象的创建和初始化,以及构造方法`__init__`。还讨论了魔术方法如`__str__`,`__lt__`,`__eq__`等,用于自定义比较和字符串表示。文章进一步讲解了封装、继承(单继承和多继承)的概念,并提到了`pass`关键字和类型注解。最后,文章展示了如何使用pymysql库操作MySQL数据库,包括连接、查询和数据插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程

初识对象

还是类
还是熟悉的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优降宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值