Python面向对象总结及类与正则表达式详解
Python面向对象总结
Python是一种面向对象的编程语言,支持类、对象、继承、多态面向对象的特性。下面是Python面向对象的一些基本概念:
类
类是一种抽象的数据类型,用来具有相同属性和方法的对象的集合。在Python中,我们可以使用class
关键字定义一个类。下面是一个例子,演示如何定义一个类:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f'Hello, my name is {self.name}, and I am {self.age} years old.')
在上面的代码中,我们定义了一个Person
类,这个类有两个属性name
和`,以及一个方法
say_hello。
init方法是一个特殊的方法,用来初始化对象的属性。
self`表示对象本身,可以访问对象的属性和方法。
对象
对象是类的实例,是具有特定属性和方法的数据结构。在Python中,我们可以使用类来创建对象。下面一个例子,演示如何创建一个对象:
person = Person('Alice', 25)
person.say_hello()
在上面的代码中,我们使用Person
类创建了一个对象person
,这个对象有两个属性name
和age
,以及一个方法say_hello
。然后,我们调用say_hello`方法,输出对象的属性。
继承
继承是一种面向对象的特性,用来描述一个类从另一个类继承属性和方法。在Python中,我们可以使用class
关键字来定义一个继承自另一个类的子类。下面是一个例子,演示如何定义一个继承自Person
类的Student
类:
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
def say_hello(self):
print(f'Hello, my name is {self.name}, and I am {self.age} years old. I am in grade {self.grade}.')
在上面的代码中,我们定义了一个Student
类,这个类继承自Person
类,有三个属性name
、age
和grade
,以及一个方法say_hello
。super()
函数用来调用父类的方法。
多态
多态是一种面向对象的特性,用来描述不同的对象可以对同一个方法做出不同的响应。在Python中,我们可以使用继承和方法重写来实现多态。下面是一个例子,演示如何实现多态:
def introduce(person):
person.say_hello()
person1 = Person('Alice', 25)
person2 = Student('Bob', 18, 10)
introduce(person1)
introduce(person2)
在上面的代码中,我们定义了一个introduce
函数,这个函数接受一个Person
对象作为参数,并调用say_hello
方法。然后,我们创建了一个Person
对象person1
和一个Student
对象person2
,并分别调用introduce
函数。由于Student
类重写了say_hello
方法,所以person2
对象的输出结果与person1
对象不同。
类与正则表达式详解
正则表达式是一种强大的文本处理工具,用来匹配、查找、替换、分割等。在Python中,我们可以使用正则表达式来处理文本。下面是一个例子,演示如何使用正则表达式匹配文本:
import re
text = 'hello world'
pattern = r'hello\s\w'
result = re.search(pattern, text)
if result:
print(result.group())
在上面的代码中,我们使用re.search
函数进行正则表达式匹配。这个正则表达式使用hello\s\w+
匹配hello
后面的空格和一个或多个单词字符。然后,我们使用if
语句判断是否匹配成功,并输出结果。
类的属性和方法
在Python中,我们可以使用类的属性和方法来处理正则表达式。下面是一个例子,演示如何使用类的属性和来处理正则表达式:
import re
class Regex:
pattern = r'hello\s\w+'
@classmethod
def search(cls, text):
result = re.search(cls.pattern, text)
if result:
return result.group()
else:
return None
text = 'hello world'
result = Regex.search(text)
if result:
print(result)
在上面的代码中,我们定义了一个Regex
类,这个类有一个属性pattern
和一个类方法search
。pattern
属性存储正则表达式,search
方法使用正则表达式匹配文本。然后,我们了一个Regex
对象,并调用search
方法,输出匹配结果。
类的继承和多态
在Python中,我们可以使用类的继承和多态来处理正则表达式。下面是一个例子,演示如何使用类的继承和多态来处理正则表达式:
import re
class Regex:
pattern = None
@classmethod
def search(cls, text):
result = re.search(cls.pattern, text)
if result:
return result.group()
else:
return None
class HelloRegex(Regex):
pattern = r'hello\s\w+'
class WorldRegex(Regex):
pattern = r'world\s\w+'
text = 'hello world'
regexes = [HelloRegex, WorldRegex]
for regex in regexes:
result = regex.search(text)
if result:
print(result)
在上面的代码中,我们定义了一个Regex
类和两个子类HelloRegex
和WorldRegex
。Regex
类有一个类方法search
,用来匹配正则表达式。HelloRegex
和WorldRegex
类分别继承自Regex
类,并重写了pattern
属性。然后,我们创建了一个文本text
和一个正则表达式列表regexes
,并使用循环遍历正则表达式列表,输出匹配结果。
示例1:提取网页中的图片链接
在爬虫开发中,我们经常需要提取网页中的图片链接。下面是一个例子,演示如何使用正则表达式提取网页中的图片链接:
import re
import requests
url = 'https://www.example.com'
response = requests.get(url)
text = response.text
pattern = r'<img.*?src="(.*?)".*?>'
result = re.findall(pattern, text)
for img_url in result:
print(img_url)
在上面的代码中,我们使用requests.get
函数获取网页内容,然后使用正则表达式<img.*?src="(.*?)".*?>
提取图片链接。这个正则表达式使用.*?
匹配任意字符,使用()
分组,使用?
表示非贪婪匹配。然后,我们使用re.findall
函数进行匹配操作,返回所有匹配结果。最后,我们使用for
循环遍历所有匹配结果,并输出图片链接。
示例2:提取网页中的电子邮件地址
在爬虫开发中,我们经常需要提取网页中的电子邮件地址。下是一个例子,演示如何使用正则表达式提取网页中的电子邮件地址:
import re
import requests
url = 'https://www.example.com'
response = requests.get(url)
text = response.text
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
result = re.findall(pattern, text)
for email in result:
print(email)
在上面的代码中,我们使用requests.get
函数网页内容,然后使用正则表达式\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
提取电子邮件地址。这个正则表达式使用\b
匹配单边界,使用[]
表示字符集,使用+
匹配前面的字符1次或多次,使用{2,}
匹配前的字符至少2次。然后,我们使用re.findall
函数进行匹配操作,返回所有匹配结果。最后,我们使用for
循环遍历所有匹配结果,并输出电子邮件地址。
以上是Python面向对象总结及类与正则表达式详解。在实际应用中,我们可以根据需要灵活运用面向对象的特性和正则表达式,实现各种文本处理任务。