Python全栈之面向对象基础

yizhihongxing

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编写函数注意事项总结

    Python编写函数注意事项总结 函数的命名 函数名应该有意义,清晰易懂 应该符合PEP 8规范,即使用小写字母和下划线拼接,且具备描述性 例如: # bad def func(a, b): pass # good def calculate_sum(a, b): pass 函数的文档注释 应该使用文档注释对函数进行描述,使得用户可以快速理解函数的作用和使用…

    python 2023年5月14日
    00
  • python高级特性和高阶函数及使用详解

    Python高级特性和高阶函数详解 在Python中,高级特性和高阶函数是我们需要掌握的一些重要概念,它们可以极大地简化我们的开发工作,提高我们的编程效率。 列表推导式 列表推导式是Python中非常有用、简洁的特性,它可以让我们用一种简洁而优雅的方式来生成列表。其基本语法如下: [expression for item in iterable if con…

    python 2023年5月14日
    00
  • 在Python中调用ggplot的三种方法

    下面是在Python中调用ggplot的三种方法的详细攻略。 1. 安装ggplot包 首先,要在Python中调用ggplot包,必须先安装它。使用pip可以进行安装: pip install ggplot 安装完成后,即可通过import语句在代码中导入该包。 2. 使用ggplot.plotting方法 ggplot包提供了ggplot.plottin…

    python 2023年6月6日
    00
  • Python代码中如何读取键盘录入的值

    当我们需要从键盘输入一些信息时,我们就需要使用Python中的input函数。 1. input函数的基本用法 input函数用于从标准输入中读取一下用户输入的内容,其基本语法如下: input(prompt) 其中,prompt是一个可选参数,表示提示文本。它会显示在输入框之前,告诉用户需要输入什么内容。用户输入完成后,input函数将其作为一个字符串返回…

    python 2023年6月5日
    00
  • 在django项目中导出数据到excel文件并实现下载的功能

    下面是在Django项目中导出数据到Excel文件并实现下载的功能的完整实例教程: 步骤一:安装依赖库 使用pip命令安装以下库: pandas: 用于操作数据 openpyxl: 用于操作Excel文件 django-forms: 用于创建表单 运行以下命令安装依赖库: pip install pandas openpyxl django-forms 步骤…

    python 2023年5月13日
    00
  • 18 个 Python 编程技巧,提高工作效率

    下面我将为大家详细讲解“18 个 Python 编程技巧,提高工作效率”的完整攻略。 1. 列表解析(List comprehension) 列表解析是 Python 的一项强大而又实用的功能,它可以使用更少的代码来创建或修改列表。例如,你可以使用以下代码创建一个包含 1 到 10 的数字的列表: numbers = [x for x in range(1,…

    python 2023年5月13日
    00
  • python Popen 获取输出,等待运行完成示例

    Python中的subprocess模块允许我们在Python中创建新的进程,与外部进程进行交互并获取执行结果。其中,Popen()是最基本的函数之一,它可以启动一个子进程,并返回一个Popen对象,该对象可用于操作子进程。 下面是获取Popen输出、等待进程完成的一般步骤: 导入subprocess模块 import subprocess 使用Popen启…

    python 2023年6月5日
    00
  • Python暴力破解Mysql数据的示例

    当我们的数据被加密,或者我们忘记了密码,就需要使用破解工具来从数据中获取信息,这就是一种常见的安全测试方法,也是正确操作的情况下找回密码的方法。 在本文中,我们将重点讨论Python暴力破解Mysql数据的示例。这是一种非常流行的安全测试方法,许多黑客和安全专家都使用它来测试他们的Mysql数据安全性。 下面是Python对Mysql数据库进行暴力破解的示例…

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