Python面向对象总结及类与正则表达式详解

  • Post category:Python

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_helloinit方法是一个特殊的方法,用来初始化对象的属性。self`表示对象本身,可以访问对象的属性和方法。

对象

对象是类的实例,是具有特定属性和方法的数据结构。在Python中,我们可以使用类来创建对象。下面一个例子,演示如何创建一个对象:

person = Person('Alice', 25)
person.say_hello()

在上面的代码中,我们使用Person类创建了一个对象person,这个对象有两个属性nameage,以及一个方法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类,有三个属性nameagegrade,以及一个方法say_hellosuper()函数用来调用父类的方法。

多态

多态是一种面向对象的特性,用来描述不同的对象可以对同一个方法做出不同的响应。在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和一个类方法searchpattern属性存储正则表达式,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类和两个子类HelloRegexWorldRegexRegex类有一个类方法search,用来匹配正则表达式。HelloRegexWorldRegex类分别继承自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面向对象总结及类与正则表达式详解。在实际应用中,我们可以根据需要灵活运用面向对象的特性和正则表达式,实现各种文本处理任务。