@
目录
- Python进阶教程:面向对象编程(OOP)
- 一、什么是面向对象编程
- 二、类与对象
- 2.1 定义类
- 2.2 self 是什么
- 三、封装
- 四、继承
- 五、多态
- 六、类属性与类方法
- 七、魔法方法
- 八、实战:图书管理系统
- 总结
Python进阶教程:面向对象编程(OOP)
本文是 Python 入门教程系列 的第 2 篇。上一篇介绍了 Python 的基础语法(变量、条件、循环、函数),本篇深入讲解面向对象编程。
一、什么是面向对象编程
面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程思想,它把数据和对数据的操作封装成对象。与面向过程相比,OOP 更适合大型项目:
- 可复用:类可以多次实例化
- 易维护:代码结构清晰
- 可扩展:通过继承轻松扩展功能
OOP 三大特性:封装、继承、多态。
二、类与对象
2.1 定义类
用 class 关键字定义类,用类创建对象:
class Dog:def __init__(self, name, age):self.name = nameself.age = agedef bark(self):print(f"{self.name} 汪汪叫!")def info(self):print(f"{self.name}今年{self.age}岁")dog1 = Dog("旺财", 3)
dog1.bark()
dog1.info()
2.2 self 是什么
self 代表当前实例,所有实例方法第一个参数必须是 self,用于访问实例属性和其他方法。
三、封装
封装将内部细节隐藏,通过方法对外提供接口。Python 用命名约定实现私有:
class BankAccount:def __init__(self, owner, balance=0):self.owner = ownerself.__balance = balancedef deposit(self, amount):if amount > 0:self.__balance += amountprint(f"存入{amount}元,余额{self.__balance}元")def withdraw(self, amount):if 0 < amount <= self.__balance:self.__balance -= amountprint(f"取出{amount}元,余额{self.__balance}元")else:print("余额不足!")def get_balance(self):return self.__balanceacc = BankAccount("小明", 1000)
acc.deposit(500)
acc.withdraw(200)
四、继承
子类继承父类的属性和方法,并可扩展或重写:
class Animal:def __init__(self, name):self.name = namedef speak(self):print("动物叫")class Cat(Animal):def speak(self):print(f"{self.name} 喵喵叫!")class Dog(Animal):def speak(self):print(f"{self.name} 汪汪叫!")animals = [Cat("咪咪"), Dog("旺财")]
for a in animals:a.speak()
五、多态
多态指同一操作作用于不同对象产生不同结果。上面的例子中,speak() 对猫和狗有不同的表现,这就是多态。
六、类属性与类方法
class Student:school = "第一中学"def __init__(self, name):self.name = name@classmethoddef get_school(cls):return cls.school@staticmethoddef hello():print("这是静态方法")s1 = Student("张三")
s2 = Student("李四")
print(s1.school, s2.school)
print(Student.get_school())
七、魔法方法
Python 中以双下划线开头和结尾的方法是魔法方法,如 init、str、len:
class Book:def __init__(self, title, pages):self.title = titleself.pages = pagesdef __str__(self):return f"《{self.title}》共{self.pages}页"def __len__(self):return self.pagesb = Book("Python编程", 300)
print(b)
print(len(b))
八、实战:图书管理系统
综合运用所学知识,实现一个简单的图书管理:
class Book:def __init__(self, title, author):self.title = titleself.author = authorself.borrowed = Falsedef __str__(self):status = "已借出" if self.borrowed else "可借"return f"《{self.title}》- {self.author} [{status}]"class Library:def __init__(self):self.books = []def add_book(self, book):self.books.append(book)print(f"添加成功:{book}")def borrow(self, title):for book in self.books:if book.title == title and not book.borrowed:book.borrowed = Trueprint(f"借出成功:{book}")returnprint(f"《{title}》不可借")def show_all(self):for book in self.books:print(book)lib = Library()
lib.add_book(Book("Python入门", "张三"))
lib.add_book(Book("算法导论", "李四"))
lib.borrow("Python入门")
lib.show_all()
总结
本篇讲解了 OOP 的三大特性(封装、继承、多态)以及类属性、魔法方法等进阶知识,并用图书管理系统串起全部知识点。下一篇将介绍文件操作与异常处理,敬请关注!