今天我们学习python编程常用模块与面向对象

一.re模块


1.正则表达式

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

2.常用匹配模式

模式 描述
\w 匹配字母数字及下划线
\W 匹配非字母数字下划线
\s 匹配任意空白字符,等价于[Mt\n\Nf]
\S 匹配任意非空字符
\d 匹配任意数字,等价于[0-9]
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
\G 匹配最后匹配完成的位置
\n 匹配一个换行符
\t 匹配一个制表符
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk]匹配'a','m'或'k'
[^...] 不在口中的字符:abc匹配除了a,b,c之外的字符。
* 匹配0个或多个的表达式。
+ 匹配1个或多个的表达式。
? 无配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 精确匹配n个前面表达式。
{n,m} 匹配n到m次由前面的正则表达式定义的片段,贪婪方式
a|b 匹配a或b
() 匹配括号内的表达式,也表示一个组

正则匹配:

python 复制代码
import re
# str1 = 'hello world 123\n'
# print(re.findall('\w', str1))
# print(re.findall('\W', str1))
# print(re.findall('\d', str1))
# print(re.findall('\D', str1))

输出

python 复制代码
['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '1', '2', '3']
[' ', ' ', '\n']
['1', '2', '3']
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', ' ', '\n']

识别IP地址

python 复制代码
import re
str2 = '192.168.1.100 255.255.255.255 300.300.300.300'

import ipaddress
ips = re.findall(r'\d+\.\d+\.\d+\.\d+', str2)
for ip in ips:
    try:
        ipaddress.ip_address(ip)
        print(f'{ip} is a valid IP address')
    except ValueError:
        print(f'{ip} is not a valid IP address')

输出

python 复制代码
192.168.1.100 is a valid IP address
255.255.255.255 is a valid IP address
300.300.300.300 is not a valid IP address

二.面向对象


一、面向对象基本概念
  • 类:用几大特征表述一一类事物。类要表达的是一个抽象的概念。

  • 对象:对象是类的具体实现。举个例子,类像是一张图纸,对象是由这张图纸产出的具体物品。类只有一个,但是对象可以同这个类实例出多个。

对象是类的实例,类是对象的模板。

类中的成员只有属性和方法,不要裸露地把判断和循环写在类中,而要用方法(相当于函数)包起来。

面向对象的本质就像「搭乐高」:

  1. 每个积木块都是独立的小机器人(对象)

    • 有自己专属的技能(方法)

    • 携带自己的工具包(属性)

    • 比如「汽车积木」自己会跑、有四个轮子

  2. 积木之间通过标准接口互相连接

    • 不需要知道对方内部怎么运作

    • 只要说「帮我运货」,卡车积木就会自动完成任务

  3. 可以批量生产相似机器人

    • 用「机器人模具」(类)造出一模一样的

    • 还能给模具加新功能(继承)

    • 比如给「动物模具」加翅膀,立刻生成会飞的动物

  4. 同一个指令能触发不同反应

    • 对所有积木喊「干活」,有的扫地、有的做饭(多态)

    • 每个积木按自己的方式响应

最终效果:用现实世界的思维方式,把复杂系统拆解成互相协作的智能模块,像指挥机器人战队一样写程序。

1.1类的定义

python 复制代码
#面向对象
class car():
    
classcar(object):

1.2类的实例化

python 复制代码
#创建对象
bmw = car()
print(bmw.color)
bmw.run()

1.3类的基本结构

python 复制代码
#面向对象
class car():
    color = 'red'
    def run(self):
        print('running')

#创建对象
bmw = car()
print(bmw.color)
bmw.run()

1.4类的命名

类的命名推荐使用驼峰命名法,如:

MyCar,MaHuaTeng;

1.5对象、类的相关操作

1.5.1成员等级

python对成员的保护分为两个等级:

  1. 私有的(private):在本类内部可以访问,类的外部不可以访问 。(python中属性或者方法前面加两个下划线"_"

  2. 公有的(public):在本类的内部和外部都可以访问

  3. 受保护的(protect)(了解)在其他高级语言中,如java,php,c++等语言,有三个等级:private,public,protected。不能够继承的。

三、面向对象三大特征

2.1封装
2.2继承

一个类继承另外一个类,那么该类就是子类(衍生类),被继承的这个类叫做父类(超类,基类)

继承:

(1)单继承(2)多继承

python3中所有的类都默认继承父类object

2.2.1单继承

(1)子父继承之后,子类可以调用父类的公有的属性和方法

(2)子父继承之后,子类不可以调用父类的私有成员

(3)子父继承之后,子类可以改写父类的方法

(4)子父继承之后,子类优先调用自己的成员属性方法,如果没有则调用父类的属性方法,如果都没有,直接报错

python 复制代码
#面向对象
class car():
    color = 'red'
    __logo = '宝马'  #私有属性
    logo = __logo
    def run(self):
        print('跑起来了')
    def __price(self):
        print('价格是100万')
    def price(self):
        self.__price()  #在类的内部访问私有方法
    def speak(self):
        print('我的颜色是'+ self.color)

class new_car(car): #继承
    def speak(self):
        return '我的颜色是'+ self.color + ', 我的品牌是' + self.logo
    
new_car = new_car()
print(new_car.speak())

输出

python 复制代码
我的颜色是red, 我的品牌是宝马
2.2.2多继承

super的用法:(1)super本身是一个类,super()是一个对象,用于调用父类的绑定方法(2)super()只应用在绑定方法中,默认自动传递self对象(前提:super所在作用域存在self)(3)super用途:解决复杂的多继承调用关系

python 复制代码
classFather():
	property="抽烟喝酒"
	deff_hobby():
		print("出去喜欢抽烟喝酒")
classMother():
	property="化妆品包包"
	defm_hobby(self):
		print("逛街买化妆品包包")

classSon(Father,Mother):
	property="打游戏看直播"
	#1.利用类来调用父类的属性和方法
	defskill1(self):
		Father.f_hobby()
		print(Mother.property)

	#2.利用对象调用父类的属性和方法
	#self在调用父类方法属性的时候,在本类有的时候,先调用自己的,如果没有,再调用父类的
	defskill2(self):
		self.m_hobby()#无,调用父类
		print(self.property)#有,调用自身
	
	#3.利用super调用父类的属性和方法
	#super()只调用父类的相关公有成员,不会调用自己本类中的公有成员,super()特指调用父类,跟self有区别
	defskill3(self):
		print(super().property)#多个父类,按顺序继承
		super().m_hobby()#只应用在绑定方法中

self和super区别(****)

当使用self调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用super时,则从父类的方法列表中开始找,然后调用父类的这个方法。

2.2.3菱形继承

多继承的弊端会造成菱形继承这种情况,照不清调用顺序

super对象按照mro列表的顺序依次调用,解决菱形继承存在问题

2.3多态

概念:不同的子类对象,调用相同的父类方法,产生了不同的执行效果

关键字:继承改写

多态作用:在不改写父类代码的前提下,能实现不同的效果

四、魔术方法

魔术方法:特定时机自动触发

3.1__init__魔术方法(****)
python 复制代码
class car():
    def __init__(self,color,logo):
        self.color = color
        self.logo = logo
    def speak(self):
        print('我的颜色是'+ self.color + ', 我的品牌是' + self.logo)

car1 = car('红色','宝马')
car1.speak()

输出

python 复制代码
我的颜色是红色, 我的品牌是宝马
相关推荐
一头生产的驴3 小时前
java整合itext pdf实现固定模版pdf导出
java·python·pdf
魔都吴所谓3 小时前
【python】快速实现pdf批量去除指定位置水印
java·python·pdf
一匹电信狗3 小时前
【MySQL】数据库表的操作
linux·运维·服务器·数据库·mysql·ubuntu·小程序
YFCodeDream4 小时前
MLLM技术报告 核心创新一览
python·gpt·aigc
立昂4 小时前
Linux route
linux·运维
爱吃生蚝的于勒4 小时前
【Linux】深入理解进程(一)
java·linux·运维·服务器·数据结构·c++·蓝桥杯
heisd_14 小时前
使用搭载Ubuntu的树莓派开启热点
linux·运维·ubuntu
Han.miracle4 小时前
数据结构——排序的学习(一)
java·数据结构·学习·算法·排序算法
夜幽青玄5 小时前
mybatis-plus调用报 org.springframework.dao.DataIntegrityViolationException 错误处理
开发语言·python·mybatis