目录
在 Python 编程的广袤世界里,类与对象构成了面向对象编程(OOP)的基石。它们赋予了开发者将现实世界中的实体及其行为抽象化、模型化的能力,极大地提升了代码的组织性、可维护性与可复用性。无论是构建大型软件系统,还是处理复杂的数据逻辑,类与对象的合理运用都起着至关重要的作用。接下来,我们将通过几个具体的需求实例,深入探索 Python 中类与对象的应用。
游乐园门票类实现
需求分析
需求是创建一个游乐园门票类,能够统计不同日期(平日、周末)、不同年龄段(儿童、成人)游客的总票价,且游客人数不定,由用户输入决定。其中,平日票价 100 元,周末票价为平日的 120%,儿童享受半价优惠。
代码实现
class Ticket:
all_ticket = 0
def __init__(self, name, date, age):
self.name = name
self.date = date
self.age = age
@staticmethod
def show():
print("1)平日票价100元,2)周末票价为平日票价120%,3)儿童半价")
class Daily(Ticket):
def buy(self):
if self.age < 18:
Ticket.all_ticket += 50
else:
Ticket.all_ticket += 100
class Sunday(Ticket):
def buy(self):
if self.age < 18:
Ticket.all_ticket += 60
else:
Ticket.all_ticket += 120
def buy():
num_pepole = int(input('请输入总人数:'))
for i in range(num_pepole):
name = input('请输入姓名:')
age = int(input("请输入年龄:"))
date = input('请输入周几:')
if date in ['周一', '周二', '周三', '周四', '周五']:
a = Daily(name, date, age)
a.show()
a.buy()
if date in ['周六', '周日']:
a = Sunday(name, date, age)
a.show()
a.buy()
buy()
print(f"总票价为:{Ticket.all_ticket}")
在这段代码中,Ticket
类作为基类,定义了通用的属性name
(姓名)、date
(日期)、age
(年龄)以及静态方法show
用于展示票价规则。Daily
类和Sunday
类继承自Ticket
类,分别实现了平日和周末购买门票的具体逻辑,根据游客年龄计算票价并累加到all_ticket
中。buy
函数负责与用户交互,获取游客信息并创建相应的门票实例进行票价计算。
另一种实现思路
class Ticket:
all_ticket = 0
def __init__(self, name, date, age):
self.name = name
self.date = date
self.age = age
@staticmethod
def show():
print("1)平日票价100元,2)周末票价为平日票价120%,3)儿童半价")
class Daily(Ticket):
def buy(self):
if self.age < 18:
Ticket.all_ticket += 50
else:
Ticket.all_ticket += 100
class Sunday(Ticket):
def buy(self):
if self.age < 18:
Ticket.all_ticket += 60
else:
Ticket.all_ticket += 120
class Sale:
def sale(self, people):
if people.date in ['周一', '周二', '周三', '周四', '周五']:
people = Daily(people.name, people.date, people.age)
people.show()
people.buy()
print(f"总票价为:{Ticket.all_ticket}")
elif people.date in ['周六', '周日']:
people = Sunday(people.name, people.date, people.age)
people.show()
people.buy()
print(f"总票价为:{Ticket.all_ticket}")
prpole1 = Ticket('张三', '周五', 70)
zhangsan = Sale()
zhangsan.sale(prpole1)
这种实现方式新增了Sale
类,将根据日期选择不同票价计算逻辑的操作封装在sale
方法中,使得代码结构更加清晰,职责更加单一。
学生类实现
需求分析
需要定义一个学生类,包含姓名、年龄、成绩(语文、数学、英语)这些类属性,同时提供获取学生姓名、年龄以及三门科目中最高分数的类方法。
代码实现
class Student:
name = "李飞"
age = 18
chinese_result = 96
math_result = 100
english_result = 98
def get_name(self):
print(f"学生姓名:{Student.name}")
print(type(Student.name))
def get_age(self):
print(f"年龄:{Student.age}")
print(type(Student.age))
def get_course(self):
print(f"最高分数为:{max(Student.math_result, Student.english_result, Student.chinese_result)}")
print(type(Student.english_result))
select = Student()
select.get_name()
select.get_age()
select.get_course()
在这个Student
类中,直接定义了类属性来存储学生的基本信息和成绩。get_name
、get_age
和get_course
方法分别用于获取学生的姓名、年龄和最高成绩,并打印出相应信息及其数据类型。这种实现简单直接,适用于固定学生信息的场景。若要处理多个学生的情况,可以在构造函数__init__
中初始化每个学生的独特信息。
用户与手机套餐类实现
需求分析
定义一个用户类,包含用户名与充值金额属性;定义一个手机类,能够快捷输出默认的 3 种套餐(18 元动感地带套餐,28 元家庭版通用套餐,38 元无限畅玩套餐),具备办理套餐的方法,可根据用户充值金额判断办理是否成功,同时还要设计统计所有用户数量与各个套餐办理总数的方法。
代码实现
class User:
user_count = 0
def __init__(self, name, money, choose):
self.name = name
self.money = money
self.choose = choose
User.user_count += 1
class Phone(User):
one_count = 0
two_count = 0
three_count = 0
@staticmethod
def show():
print('18元动感地带套餐,28元家庭版通用套餐,38元无限畅玩套餐')
def work(self):
if self.choose == '18元动感地带套餐':
if self.money >= 18:
Phone.one_count += 1
print('18元动感地带套餐办理成功!')
else:
print('金额不足,办理失败!')
elif self.choose == '28元家庭版通用套餐':
if self.money >= 28:
Phone.two_count += 1
print('28元家庭版通用套餐办理成功!')
else:
print('金额不足,办理失败!')
elif self.choose == '38元无限畅玩套餐':
if self.money >= 38:
Phone.three_count += 1
print('38元无限畅玩套餐办理成功!')
else:
print('金额不足,办理失败!')
def count():
print(f"来办理业务的用户数量为:{Phone.user_count}")
print(f"今日18元动感地带套餐办理总数为:{Phone.one_count},28元家庭版通用套餐办理总数为:{Phone.two_count},38元无限畅玩套餐办理总数为:{Phone.three_count}")
user1 = Phone('张三', 20, '18元动感地带套餐')
user1.show()
user1.work()
user2 = Phone('李四', 90, '38元无限畅玩套餐')
user1.show()
user2.work()
user3 = Phone('王五', 10, '28元家庭版通用套餐')
user1.show()
user3.work()
count()
User
类记录了用户的基本信息,并通过user_count
类属性统计用户总数。Phone
类继承自User
类,添加了套餐相关的功能。show
方法用于展示套餐信息,work
方法根据用户选择的套餐和充值金额判断办理结果,并更新相应套餐的办理数量。count
函数用于输出用户总数和各套餐的办理总数,方便统计业务数据。
总结
通过上述三个案例,我们全面展示了 Python 中类与对象在不同场景下的应用。从游乐园门票类对复杂业务逻辑的处理,到学生类对数据的封装与获取,再到用户与手机套餐类对业务流程的模拟与统计,充分体现了类与对象在代码组织和功能实现上的强大能力。在实际编程中,我们应根据具体需求,合理设计类的属性与方法,运用继承、多态等特性优化代码结构,提高代码的质量和效率,从而更好地解决各种编程问题。