Python 类与对象:从基础到实践

目录

游乐园门票类实现

需求分析

代码实现

另一种实现思路

学生类实现

需求分析

代码实现

用户与手机套餐类实现

需求分析

代码实现

总结


        在 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_nameget_ageget_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 中类与对象在不同场景下的应用。从游乐园门票类对复杂业务逻辑的处理,到学生类对数据的封装与获取,再到用户与手机套餐类对业务流程的模拟与统计,充分体现了类与对象在代码组织和功能实现上的强大能力。在实际编程中,我们应根据具体需求,合理设计类的属性与方法,运用继承、多态等特性优化代码结构,提高代码的质量和效率,从而更好地解决各种编程问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值