Python全栈之面向对象基础

Python全栈之面向对象基础

Python作为一门高级语言,自然离不开面向对象编程的支持。本篇文章将为大家介绍Python面向对象编程的基础概念和应用,包括类、对象、继承、多态等内容。

面向对象基础概念

类和对象

类是抽象的概念,它定义了一类对象的共同属性和方法。而对象则是具体的实例化后的个体,每个对象都拥有其独特的属性和方法。比如我们可以用一个“Person”类来描述所有人的共性,然后通过实例化该类来创建不同的人的对象,每个人都有自己的姓名、年龄等特征。下面是一个示例代码:

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}, I'm {self.age} years old.")

p1 = Person("Tom", 18)
p2 = Person("Lucy", 20)
p1.say_hello()  # 输出 "Hello, my name is Tom, I'm 18 years old."
p2.say_hello()  # 输出 "Hello, my name is Lucy, I'm 20 years old."

属性和方法

类和对象都可以定义属性和方法。属性是对象的状态,它描述了对象的某些特征。方法是对象的行为,它实现了对象的某些功能。

在Python中,属性和方法都可以通过“点运算符”来访问。示例如下:

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print("woof!")

d = Dog("旺财")
print(d.name)  # 输出 "旺财"
d.bark()  # 输出 "woof!"

封装、继承和多态

面向对象编程的三个基本特性是封装、继承和多态。

封装是指隐藏对象的属性和实现细节,仅对外暴露接口,确保对象的安全性和可靠性。

继承是指一个子类可以继承父类的属性和方法,也可以重写父类的方法或者添加自己的方法。

多态是指同一个方法可以在不同的对象上呈现出不同的行为和结果。它有两种形式:重载和覆盖。重载是指方法名相同,但参数个数或类型不同;覆盖是指子类重新定义了父类的方法。

下面是一个继承和多态的示例代码:

class Animal:
    def __init__(self, name):
        self.name = name

    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("woof!")

class Cat(Animal):
    def make_sound(self):
        print("meow!")

def animal_speak(animal):
    animal.make_sound()

a1 = Dog("旺财")
a2 = Cat("小白")
animal_speak(a1)  # 输出 "woof!"
animal_speak(a2)  # 输出 "meow!"

实战篇:使用面向对象编程实现一个简单的图书馆管理系统

首先我们需要定义几个类:

图书类 Book

属性:

  • book_id: 书籍ID
  • book_name: 书籍名称
  • book_author: 书籍作者

方法:

  • show_info: 显示书籍信息
class Book:
    def __init__(self, book_id, book_name, book_author):
        self.book_id = book_id
        self.book_name = book_name
        self.book_author = book_author

    def show_info(self):
        print(f"【{self.book_id}】{self.book_name} - {self.book_author}")

读者类 Reader

属性:

  • reader_id: 读者ID
  • reader_name: 读者姓名
  • borrowed_books: 已借阅书籍列表

方法:

  • borrow_book: 借阅书籍
  • return_book: 归还书籍
  • show_borrowed_books: 显示已借阅的书籍列表
class Reader:
    def __init__(self, reader_id, reader_name):
        self.reader_id = reader_id
        self.reader_name = reader_name
        self.borrowed_books = []

    def borrow_book(self, book):
        self.borrowed_books.append(book)
        print(f"读者 {self.reader_name} 借阅了书籍【{book.book_name}】")

    def return_book(self, book):
        if book in self.borrowed_books:
            self.borrowed_books.remove(book)
            print(f"读者 {self.reader_name} 归还了书籍【{book.book_name}】")
        else:
            print(f"读者 {self.reader_name} 没有借阅这本书")

    def show_borrowed_books(self):
        print(f"读者 {self.reader_name} 已借阅的书籍列表:")
        for book in self.borrowed_books:
            book.show_info()

图书馆类 Library

属性:

  • books: 所有书籍列表
  • readers: 所有读者列表

方法:

  • add_book: 添加新书籍
  • remove_book: 删除旧书籍
  • add_reader: 添加新读者
  • remove_reader: 删除旧读者
  • borrow_book: 读者借阅书籍
  • return_book: 读者归还书籍
  • show_books: 显示所有书籍信息
  • show_readers: 显示所有读者信息
class Library:
    def __init__(self):
        self.books = []
        self.readers = []

    def add_book(self, book):
        self.books.append(book)
        print(f"添加书籍【{book.book_name}】成功")

    def remove_book(self, book):
        if book in self.books:
            self.books.remove(book)
            print(f"删除书籍【{book.book_name}】成功")
        else:
            print(f"书籍【{book.book_name}】不存在")

    def add_reader(self, reader):
        self.readers.append(reader)
        print(f"添加读者【{reader.reader_name}】成功")

    def remove_reader(self, reader):
        if reader in self.readers:
            self.readers.remove(reader)
            print(f"删除读者【{reader.reader_name}】成功")
        else:
            print(f"读者【{reader.reader_name}】不存在")

    def borrow_book(self, reader_id, book_id):
        reader = self.get_reader(reader_id)
        book = self.get_book(book_id)
        if reader and book:
            reader.borrow_book(book)
        else:
            print("借阅失败,书籍或读者不存在")

    def return_book(self, reader_id, book_id):
        reader = self.get_reader(reader_id)
        book = self.get_book(book_id)
        if reader and book:
            reader.return_book(book)
        else:
            print("归还失败,书籍或读者不存在")

    def show_books(self):
        print("所有书籍列表:")
        for book in self.books:
            book.show_info()

    def show_readers(self):
        print("所有读者列表:")
        for reader in self.readers:
            print(reader.reader_name)

    def get_book(self, book_id):
        for book in self.books:
            if book.book_id == book_id:
                return book
        return None

    def get_reader(self, reader_id):
        for reader in self.readers:
            if reader.reader_id == reader_id:
                return reader
        return None

有了这些类之后,我们就可以编写一个测试脚本来实现图书馆管理系统的基本功能了:

# 创建几本书
book1 = Book(1, "Python基础教程", "Bill Lubanovic")
book2 = Book(2, "流畅的Python", "Luciano Ramalho")
book3 = Book(3, "Python编程精解", "Wesley Chun")

# 创建几个读者
reader1 = Reader(1, "小明")
reader2 = Reader(2, "小红")
reader3 = Reader(3, "小刚")

# 创建图书馆对象
library = Library()

# 添加书籍和读者
library.add_book(book1)
library.add_book(book2)
library.add_book(book3)
library.add_reader(reader1)
library.add_reader(reader2)
library.add_reader(reader3)

# 借阅和归还书籍
library.borrow_book(1, 1)
library.borrow_book(2, 2)
library.borrow_book(1, 2)
library.borrow_book(2, 3)
library.return_book(1, 1)
library.return_book(2, 2)
library.return_book(1, 2)

# 显示所有书籍和读者
library.show_books()
library.show_readers()

以上就是一个简单的图书馆管理系统的代码实现,它具备了添加书籍和读者、借阅和归还书籍、显示书籍和读者信息等基本功能。可以根据实际需求进一步扩展和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python全栈之面向对象基础 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python处理JSON时的值报错及编码报错的两则解决实录

    Python处理JSON时的值报错及编码报错的两则解决实录 在Python中,处理JSON时可能会遇到两种错误:值错误和编码错误。以下是解决这个问题的方法: 值错误 当我们处理JSON时,如果JSON数据中的值不符合JSON规范,就会出现值错误。以下是解决这个问题的方法: 检查JSON数据是否符合JSON规范。 修复JSON数据。 例如,我们可以使用以下代码…

    python 2023年5月13日
    00
  • 如何利用python检测图片是否包含二维码

    要检测一张图片是否包含二维码,我们需要使用Python中的qrcode和PIL库。下面是利用Python检测图片是否包含二维码的完整攻略: 步骤一:安装qrcode和PIL库 安装qrcode和PIL库的命令如下所示: pip install qrcode pip install pillow 步骤二:导入库文件和读取图片的函数 在Python代码中,我们需…

    python 2023年5月18日
    00
  • 如何在Python中进行异步编程?

    异步编程是Python中的一种编程模型,使用异步编程可以让程序在处理I/O密集型任务时更加高效。在Python 3.5及以上版本中引入了async/await关键词,它们是实现异步编程的主要工具。下面是在Python中进行异步编程的完整攻略。 1. 使用async/await关键词进行异步编程 async/await关键词是Python 3.5及以上版本中添…

    python 2023年4月19日
    00
  • 在Docker上开始部署Python应用的教程

    在Docker上开始部署Python应用的教程,主要分为以下几个步骤: 确认所需环境 在使用Docker来部署Python应用之前,需要确认本地环境是否已经安装了Docker和Python。 创建Dockerfile 在本地文件夹中新建一个名为Dockerfile的文件,并在其开头加入以下几行代码: FROM python:3.8-alpine WORKDI…

    python 2023年6月3日
    00
  • python正则表达式re.match()匹配多个字符方法的实现

    Python正则表达式re.match()匹配多个字符方法的实现 在Python中,re模块提供了正则表达式的支持,可以使用re.match()方法匹配多个字符。本攻略将详细讲解如何使用re.match()方法匹配多个字符,包括基本用法、常用函数和示例应用。 re.match()方法基本用法 re.match()方法用于从字符串的开头匹配正则表达式。如果匹配…

    python 2023年5月14日
    00
  • django queryset相加和筛选教程

    下面是关于“DjangoQuerySet相加和筛选教程”的完整攻略。 1. 概述 首先,需要了解什么是Django QuerySet。Django QuerySet是Django中非常重要的概念之一,提供了许多强大的查询方法,用于过滤和操作数据库中的数据。Django QuerySet相加和筛选是Django中经常使用的查询技巧之一,可以用于从多个表中查询数…

    python 2023年5月14日
    00
  • 如何在 python(或 numpy/scipy)中生成复杂的高斯白噪声信号?

    【问题标题】:How to generate a complex gaussian white noise signal in python(or numpy/scipy)?如何在 python(或 numpy/scipy)中生成复杂的高斯白噪声信号? 【发布时间】:2023-04-02 08:10:02 【问题描述】: 我正在做一些关于 DSP(数字信号处…

    Python开发 2023年4月8日
    00
  • Python使用matplotlib绘制余弦的散点图示例

    下面我来详细讲解使用Python的Matplotlib库绘制余弦函数散点图的完整攻略。需要注意的是,Matplotlib是Python中最为常用的数据可视化库之一,用于绘制各种类型的图表、图形,包括折线图、散点图、直方图、饼图等。 第一步:导入库文件 第一步骤就是引入所需要的库文件,这里我们需要引入matplotlib库,并使用以下命令进行导入: impor…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部