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中Pycharm 输出中文或打印中文乱码现象的解决办法

    下面是Python中Pycharm输出中文或打印中文乱码现象的解决办法,具体步骤如下: 问题描述 在编写Python代码时,经常需要输出中文,但是在使用Pycharm输出中文或打印中文时,有时会出现乱码现象。例如,我们使用print()函数输出中文字符串“你好”,结果在输出时却变成了“鏈€濂藉”。 解决办法 1. 修改文件编码格式 Pycharm的默认编码…

    python 2023年5月20日
    00
  • python使用urllib2模块获取gravatar头像实例

    简述获取gravatar头像的原理 Gravatar是一项用于为用户提供全球通用头像的服务,每个Gravatar对应一个256位MD5哈希值,这个哈希值是基于用户的注册邮箱计算而来的。我们可以在Gravatar的官网上注册一个账号,然后上传对应的头像,这样我们就可以使用这个邮箱地址在任何支持Gravatar的网站上显示自己的头像。 Python中可使用urr…

    python 2023年6月3日
    00
  • Python 切片索引越界的问题(数组下标越界)

    下面是关于Python切片索引越界问题的完整攻略。 什么是Python切片索引越界问题? 在Python中,切片是一种非常常见的操作,可以通过“:”运算符来获取一段序列的子序列,但是在进行切片操作时,由于下标越界的问题,可能会出现“IndexError: list index out of range”的错误提示。 这种错误提示通常是由于访问了一个不存在的索…

    python 2023年6月5日
    00
  • Python实现统计文本中的字符数量

    当我们需要统计某个文本中各个字符出现的次数时,可以使用Python语言来实现。下面是实现该功能的完整攻略。 1. 准备工作 首先需要一个文本文件,例如 text.txt 文件,其内容如下: Hello World, This is a TEST. 2. 读取文本文件 使用Python内置函数 open() 打开并读取文件中的内容,读取后保存到一个字符串变量中…

    python 2023年6月5日
    00
  • Python动态导入模块的方法实例分析

    下面我将详细讲解“Python动态导入模块的方法实例分析”的完整攻略。 1. 动态导入 在Python中,我们通常使用import语句来导入模块,但有时候我们需要根据一些条件来动态导入模块。这就是动态导入的概念,它允许我们在程序运行时根据需要选择导入哪些模块。 动态导入可以使用Python内置的importlib模块进行实现,它提供了一些函数来实现动态导入。…

    python 2023年6月3日
    00
  • 让Python程序定时执行的8种方法整理

    让Python程序定时执行的8种方法整理 1. 使用time模块和sleep() 我们可以使用time模块的sleep()函数来让程序暂停一段时间,从而实现定时执行的效果。例如,我们可以使用以下代码让程序每30秒钟输出一次当前时间: import time while True: print(time.strftime("%Y-%m-%d %H:%…

    python 2023年5月19日
    00
  • Python函数定义及传参方式详解(4种)

    Python是一种很受欢迎的编程语言,我们可以使用它来编写函数。函数是一种可重复使用的代码块,通过函数我们可以将一些操作进行封装并进行复用。在Python中定义函数的方式有多种,下面我们就来详细讲解一下Python函数定义及传参方式的详解。 函数定义 在Python中,定义一个函数使用def关键字,接着是函数名和括号。括号里可以包含参数,如果没有参数则括号是…

    python 2023年6月5日
    00
  • Python3字符串的常用操作方法之修改方法与大小写字母转化

    下面是针对Python3字符串的常用操作方法之修改方法与大小写字母转化的完整攻略: 修改字符串 在Python中,字符串是不可变的,所以不能直接修改字符串,但可以通过以下方式对字符串进行修改操作: 1. 字符串拼接 通过”+”操作符可以对多个字符串进行拼接,生成一个新的字符串。示例代码如下: str1 = "Hello" str2 = &…

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