面向对象实战练习 | 手把手教你入门Python之七十七

简介: 通过案例练习,对面向对象有更深的理解。

上一篇:异常的概念 | 手把手教你入门Python之七十六
下一篇:With关键字的使用 | 手把手教你入门Python之七十八

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

面向对象案例练习

1、定义一个点类 Pointer
属性是横向坐标 x 与纵向坐标 y
定义一个圆类 Circle
属性有圆心点 cp 与 半径 radius
方法有:
1、求圆的面积
2、求圆的周长
3、求指定点与圆的关系
提示:关系有三种【圆内 圆外 圆上】
涉及到的数学公式:指定点与圆心点之间的距离 与 圆的半径进行比较

import math

class Pointer(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Circle(object):
    def __init__(self, cp, radius):   # cp = p, radius = 5
        self.cp = cp
        self.radius = radius

    def get_area(self):
        return self.radius ** 2 * math.pi

    def get_length(self):
        return math.pi * 2 * self.radius

    def relationship(self, point):
        """
        求一个点和圆的关系。有三种关系:在圆内,在圆外,在圆上
        :param point:  需要判断的点
        :return:
        """
        # 计算圆心到point的距离
        distance = (point.x - self.cp.x) ** 2 + (point.y - self.cp.y) ** 2
        if distance > self.radius ** 2:
            print('在圆外')
        elif distance < self.radius ** 2:
            print('在圆内')
        else:  # 等于的情况
            print('在圆上')

p = Pointer(3, 4)  # 创建了一个Pointer对象
c = Circle(p, 5)   # 创建好的Pointer对象传递给了Circle对象c

print(c.get_area())   # 78.53981633974483
print(c.get_length())  # 31.41592653589793

p1 = Pointer(10, 10)
c.relationship(p1)    # 在圆外

p2 = Pointer(2, 2)
c.relationship(p2)   # 在圆内

p3 = Pointer(0, 0)
c.relationship(p3)   # 在圆上

2、宠物店类 PetShop
属性:店名,店中的宠物【使用列表存储宠物】
方法:展示所有宠物的信息

宠物狗类 PetDog
属性:昵称,性别,年龄,品种
方法:叫,拆家,吃饭

宠物猫类 PetCat
属性:昵称,性别,年龄,品种,眼睛的颜色
方法:叫,撒娇,吃饭
注意:
狗的叫声是汪汪 猫的叫声是喵喵
狗吃的是骨头 猫吃的是鱼

class PetShop(object):
    def __init__(self, shop_name, pet_list=None):
        self.shop_name = shop_name
        if pet_list is None:
            pet_list = []
        self.pet_list = pet_list

    # def __init__(self, shop_name):
        # self.shop_name = shop_name
        # self.pet_list = []

    def show_pets(self):  
        if len(self.pet_list) == 0:
            print('本店还没有宠物')    
            return

        print('{}有{}个宠物,它们是:'.format(self.shop_name, len(self.pet_list)))
        for pet in self.pet_list:
            # print('姓名:{},性别:{},品种:{},年龄:{}'.format(pet.name, pet.gender, pet.breed, pet.age))
            print(pet)
            

class Pet(object):
    def __init__(self, name, gender, age, breed):
        self.name = name
        self.gender = gender
        self.age = age
        self.breed = breed


    def bark(self):
        print(self.name + '正在叫')

    def eat(self):
        print(self.name+'正在吃东西')

    def __str__(self):
        return '姓名:{},性别:{},品种:{},年龄:{}'.format(self.name, self.gender, self.breed, self.age)

class PetDog(Pet):

    def bark(self):
        print(self.name+'正在汪汪汪')

    def build_home(self):
        print(self.name+'正在拆家')

    def eat(self):
        print(self.name+'正在啃骨头')

class PetCat(Pet):
    def __init__(self, name, gender, age, breed, eyes_color):
        super(PetCat, self).__init__(name, gender, age, breed)
        self.eyes_color = eyes_color


    def bark(self):
        print(self.name+'正在喵喵喵')

    def sajiao(self):
        print(self.name+'正在撒娇')

    def eat(self):
        print(self.name+'正在吃鱼')
    
    def __str__(self):
        x = super(PetCat, self).__str__()
        x += ",眼睛颜色:{}".format(self.eyes_color)
        return x

class PetBird(Pet):
    pass


dog1 = PetDog('大黄', 'female', 3, '哈士奇')
dog2 = PetDog('二黄', 'male', 2, '萨摩耶')
cat1 = PetCat('tom', 'male', 2, '英短', 'blue')
cat2 = PetCat('包子', 'female', 3, '加菲猫', 'black')


ps = PetShop('萌宠', [dog1, dog2, cat1, cat2])
ps.show_pets()

image.png
3、打印列表

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.agae = age

    def __repr__(self):
        return '姓名:{},年龄:{}'.format(self.name, self.age)    # [姓名:张三,年龄:18,姓名:李四,年龄:20]

p1 = Person('张三', 18)
p1 = Person('李四', 20)

persons = [p1, p2]   

# 直接打印列表,会调用列表里元素的 __repr__ 方法
# print(persons)    # 直接打印一个列表,会把列表里的每一个对象的内存地址打印出来

4、1.学生类Student:
属性:学号,姓名,年龄,性别,成绩
班级类Grades
属性:班级名称,班级中的学生【使用列表存储学生】
方法:
1.查看该班级中的所有学生的信息
2.查看指定学号的学生信息
3.查看班级中成绩不及格的学生信息
4.将班级中的学生按照成绩降序排序

class Student(object):
    def __init__(self, number, name, age, gender, score):
        self.number = number
        self.name = name
        self.age = age
        self.gender = gender
        self.score = score
        
    def __str__(self):
        return '编号:{},姓名:{},年龄:{},性别:{},分数:{}'.format(self.number, self.name, self.age, self.gender, self.score)
        
class Grade(object):
    def __init__(self, name, students):
        self.name = name
        self.students = students
        
    def show_all(self):
        for student in self.students:
            print(student)    
    
    def failed_student(self):
        result = filter(lambda student: student.score < 60, self.students)
        for x in result:
            print(x)
    
    def order_student(self):
        # self.students.sort(key = lambda s: s.score, reverse = True)  # 直接修改 self.students
        return sorted(self.students, key = lambda s: s.score, reverse = True)
    
    def get_student_by_number(self, n):
        for s in self.students:
            if s.number == n:
                return s
            else:
                return '用户未找到'       
        
# 如果数字以0开头,在python2里表示八进制
s1 = Student(1, 'zhangsan', 18, 'male', 80)
s2 = Student(5, '李四', 19, 'male', 50)
s3 = Student(10, 'tony', 20, 'male', 70)
s4 = Student(7, 'jack', 18, 'female', 90)
s5 = Student(4, 'henry', 19, 'female', 56)


g = Grade('中二班', [s1, s2, s3, s4, s5])
g.show_all()
g.failed_student()
# g.order_students()
# for student in g.students:
    # print(student)

x = g.order_student()
for student in x:
    print(student)
    
print(g.get_student_by_number(1))

image.png

配套视频

相关文章
|
26天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
26天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
45 10
|
27天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
26天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
38 7
|
28天前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
28天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
42 5
|
27天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
69 3
|
测试技术 Python Perl
笨办法学 Python · 续 练习 49:`sed`
练习 49:sed 原文:Exercise 49: sed 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 当你学习如何制作快速而简陋的黑魔法时,你在练习 9 中实现了一个“低配版”的sed。
1123 0
|
Python Perl 程序员
笨办法学 Python · 续 练习 9:`sed`
练习 9:sed 原文:Exercise 9: sed 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 使用这些小型项目来研究你自己是有用的,但让我们来看看你主要关注的主题: 开始工作的启动流程,例如你的文本编辑器,你可以打字打的多好,以及计算机内部发生的其他事情。
946 0
|
27天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!