第四阶段:特殊方法与高级特性
第 10 周:综合复习与实践
周一
周二
周三
周四
周五
总结
一、项目设计与实现
二、问题与解决
三、学习成果
四、后续展望
Pet
类作为基类,包含宠物的基本属性(如姓名、年龄、品种)和一些基本方法(如 __str__
方法用于友好显示宠物信息)。Dog
和 Cat
类继承自 Pet
类,分别添加狗和猫特有的属性和方法。例如,Dog
类可以有 bark
方法,Cat
类可以有 meow
方法。PetManager
类,用于管理所有宠物,包含添加、删除、显示等操作方法。Pet
类中实现 __init__
方法和 __str__
方法。class Pet:
def __init__(self, name, age, breed):
self._name = name
self._age = age
self._breed = breed
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = value
@property
def breed(self):
return self._breed
@breed.setter
def breed(self, value):
self._breed = value
def __str__(self):
return f"Name: {self._name}, Age: {self._age}, Breed: {self._breed}"
Pet
类的实例对象,测试 __init__
方法和 __str__
方法是否正常工作。检查属性的访问和修改是否符合预期,处理可能出现的异常情况。Dog
和 Cat
类的编写,继承自 Pet
类。在 Dog
类中添加 bark
方法,在 Cat
类中添加 meow
方法。class Dog(Pet):
def bark(self):
print(f"{self.name} is barking!")
class Cat(Pet):
def meow(self):
print(f"{self.name} is meowing!")
Dog
和 Cat
类的实例对象,将它们存储在一个列表中。遍历列表,调用每个对象的 __str__
方法,验证多态性的实现。dog = Dog("Buddy", 3, "Golden Retriever")
cat = Cat("Whiskers", 2, "Siamese")
pets = [dog, cat]
for pet in pets:
print(pet)
Dog
和 Cat
类中添加一些额外的属性和方法,增强子类的特性。例如,Dog
类可以添加 favorite_toy
属性,Cat
类可以添加 sleeping_spot
属性。Dog
和 Cat
类的代码进行优化,添加必要的注释,提高代码的可读性。检查继承关系和方法的实现是否合理,确保子类能够正确继承和扩展父类的功能。PetManager
类
PetManager
类的代码,实现添加宠物、显示宠物列表、查看宠物详细信息等核心功能。使用列表来存储所有宠物对象。class PetManager:
def __init__(self):
self.pets = []
def add_pet(self, pet):
self.pets.append(pet)
def display_pets(self):
for pet in self.pets:
print(pet)
def get_pet_details(self, name):
for pet in self.pets:
if pet.name == name:
return pet
return None
PetManager
类的实例对象,添加一些宠物信息,测试 add_pet
和 display_pets
方法是否正常工作。尝试通过 get_pet_details
方法获取特定宠物的详细信息。PetManager
类功能
PetManager
类添加修改宠物信息和删除宠物信息的功能。在修改和删除操作中,添加必要的检查逻辑,确保操作的合法性。 def update_pet_info(self, name, new_age, new_breed):
pet = self.get_pet_details(name)
if pet:
pet.age = new_age
pet.breed = new_breed
print(f"Pet {name}'s information has been updated.")
else:
print(f"Pet {name} not found.")
def delete_pet(self, name):
pet = self.get_pet_details(name)
if pet:
self.pets.remove(pet)
print(f"Pet {name} has been deleted.")
else:
print(f"Pet {name} not found.")
PetManager
类的各个方法中,添加更完善的异常处理机制。例如,在添加宠物时,检查宠物对象是否合法;在修改和删除操作中,处理可能出现的 ValueError
等异常。input()
函数获取用户输入,根据用户输入调用 PetManager
类的相应方法。manager = PetManager()
while True:
print("\nPet Management System")
print("1. Add Pet")
print("2. Display Pets")
print("3. Get Pet Details")
print("4. Update Pet Info")
print("5. Delete Pet")
print("6. Exit")
choice = input("Enter your choice: ")
if choice == '1':
name = input("Enter pet name: ")
age = int(input("Enter pet age: "))
breed = input("Enter pet breed: ")
pet_type = input("Enter pet type (dog/cat): ")
if pet_type == 'dog':
pet = Dog(name, age, breed)
elif pet_type == 'cat':
pet = Cat(name, age, breed)
manager.add_pet(pet)
elif choice == '2':
manager.display_pets()
elif choice == '3':
name = input("Enter pet name: ")
pet = manager.get_pet_details(name)
if pet:
print(pet)
if isinstance(pet, Dog):
pet.bark()
elif isinstance(pet, Cat):
pet.meow()
else:
print(f"Pet {name} not found.")
elif choice == '4':
name = input("Enter pet name: ")
new_age = int(input("Enter new age: "))
new_breed = input("Enter new breed: ")
manager.update_pet_info(name, new_age, new_breed)
elif choice == '5':
name = input("Enter pet name: ")
manager.delete_pet(name)
elif choice == '6':
break
else:
print("Invalid choice. Please try again.")
Book
类、Library
类和 Reader
类。Book
类用于表示图书,包含图书的基本信息,如书名、作者、ISBN 等;Library
类用于管理图书,包括添加图书、借阅图书、归还图书等操作;Reader
类用于表示读者,包含读者的基本信息和借阅记录。class Book:
def __init__(self, title, author, isbn):
self.title = title
self.author = author
self.isbn = isbn
def __str__(self):
return f"Book: {self.title}, Author: {self.author}, ISBN: {self.isbn}"
class Library:
def __init__(self):
self.books = []
self.borrowed_books = {}
def add_book(self, book):
self.books.append(book)
def borrow_book(self, reader, book):
if book in self.books:
self.books.remove(book)
if reader not in self.borrowed_books:
self.borrowed_books[reader] = []
self.borrowed_books[reader].append(book)
print(f"{reader.name} has borrowed {book.title}")
else:
print(f"{book.title} is not available in the library")
def return_book(self, reader, book):
if reader in self.borrowed_books and book in self.borrowed_books[reader]:
self.borrowed_books[reader].remove(book)
self.books.append(book)
print(f"{reader.name} has returned {book.title}")
else:
print(f"{reader.name} did not borrow {book.title}")
class Reader:
def __init__(self, name, reader_id):
self.name = name
self.reader_id = reader_id
def __str__(self):
return f"Reader: {self.name}, ID: {self.reader_id}"
library = Library()
book1 = Book("Python Crash Course", "Eric Matthes", "978 - 1593276034")
book2 = Book("Clean Code", "Robert C. Martin", "978 - 0132350884")
library.add_book(book1)
library.add_book(book2)
reader1 = Reader("Alice", 1)
library.borrow_book(reader1, book1)
library.return_book(reader1, book1)
borrow_book
和 return_book
方法中进行了图书可用性和借阅记录的检查,当出现异常情况时,输出相应的错误信息,提高了代码的健壮性。通过完成图书管理系统这个综合项目,成功将继承、多态、特殊方法和属性装饰器等知识进行了整合和应用,加深了对 Python 面向对象编程的理解和掌握。在项目开发过程中,锻炼了问题分析和解决能力,提高了代码的设计和实现水平,同时也体会到了面向对象编程在构建复杂系统时的优势。
虽然已经掌握了 Python 面向对象编程的一些核心知识和技能,但仍有许多高级特性和应用场景需要进一步学习和探索。后续计划学习 Python 的设计模式、元类等高级内容,不断提升自己的编程能力和水平,为开发更复杂、更高效的 Python 应用程序打下坚实的基础。