猪行天下之Python基础——8.1 类与对象(下)

简介: 内容简述: 1、面相对象的理解 2、类与对象 3、继承 4、组合 5、对象相关的内置函数

3、继承


面向对象的最大优点是代码重用,而实现代码重用的重要的方法就是通过Python的继承机制。这个继承理解为我们日常说的遗产继承,儿子继承父亲的遗产。类比成编程里对应子类和父类,子类继承父类所有的属性与函数,可以进行重写者进行扩展以实现更多的功能。


Python中关于继承的规则如下


  • 继承写法class 子类(父类)


  • 子类可以继承父类的所有属性与方法


  • 子类定义与父类同名的属性与方法会自动覆盖


  • 重写时如果想调用父类的同名方法可以使用super().方法名调用


  • 父类的私有属性、方法不能继承,即__(双下划线)开头的属性名和方法名`


  • 子类可以调用super().init()的方式初始化父类


① 单继承


所谓的单继承就是只继承一个父类,代码示例如下:


class Bird:
    def __init__(self, name):
        self.name = name
    def can_fly(self, can):
        self.can = can
    def __str__(self):
        return self.name + ("能够" if self.can == True else "不能够") + "飞翔。"
class Duck(Bird):
    # 子类扩展父类中的方法
    def set_color(self, color):
        self.color = color
    # 重写父类中里的方法
    def __str__(self):
        return self.color + "的" + self.name + ("能够" if self.can == True else "不能够") + "飞翔," + "会游泳。"
if __name__ == '__main__':
    duck = Duck("小鸭子")
    duck.can_fly(False)
    duck.set_color("黄色")
    print(duck)


运行结果如下


黄色的小鸭子不能够飞翔,会游泳。


另外要注意,父类是无法调用子类方法的,比如下面的代码:


bird = Bird('鸟')
bird.can_swin()


运行后直接报错


Traceback (most recent call last):
  File "/Users/jay/Project/Python/Book/Chapter 9/9_8.py", line 33, in <module>
    bird.can_swin()
AttributeError: 'Bird' object has no attribute 'can_swin'


② 多继承


多继承就是「同时继承多个父类的属性与方法」,多个父类间用逗号隔开,另外要注意如果父类们中有相同的方法,调用的顺序是:谁在前面先调用那个父类中的方法,比如有class Person(Name, Sex,Age),三个父类里都有一个show的方法,那么子类调用的是Name里的show()!


你可以通过内置属性__mro__查看对象搜索方法时的先后顺序。另外,如果不是非得用多继承不可的话,应该尽量避免使用它,有时会出现一些不可遇见的BUG。多继承的代码示例如下:


class A:
    def show_A(self):
        print('父类A')
class B:
    def show_B(self):
        print('父类B')
# 定义一个子类,继承A和B类
class C(A, B):
    def show_C(self):
        print('子类C')
if __name__ == '__main__':
    c = C()
    c.show_A()
    c.show_B()
    c.show_C()


运行结果如下


父类A
父类B
子类C


4、组合


多继承的一个替代方案就是通过组合的方式,「把需要用到的类丢到组合类中实例化」,代码示例如下:


class Book:
    def __init__(self, num):
        self.num = num
class Phone:
    def __init__(self, num):
        self.num = num
class Wallet:
    def __init__(self, num):
        self.num = num
class Bag:
    def __init__(self, x, y, z):
        self.book = Book(x)
        self.phone = Phone(y)
        self.wallet = Wallet(z)
    def show_bag(self):
        print("您的背包里有:【书本】* %d 【手机】* %d 【钱包】* %d" %
(self.book.num, self.phone.num, self.wallet.num))
if __name__ == '__main__':
    bag = Bag(3, 2, 1)
    bag.show_bag()


运行结果如下


您的背包里有:【书本】* 3 【手机】* 2 【钱包】* 1


5、对象相关的内置函数


Python中还为我们提供了一些与对象相关的内置函数,如下表所示:


函数 作用
issubclass(class, classinfo) 如果第一个参数是第二个参数的子类,返回True,
否则返回False
isinstance(object, classinfo) 如果第一个参数是第二个参数的实例对象,返回True,
否则返回False
hasattr(object, name) 测试一个对象中是否有指定的属性,属性名要用引号
括着!
getattr(object, name, [,default]) 返回对象的指定属性值,不存在返回default值,
没设会报ArttributeError异常
setattr(object, name, value) 设置对象中指定属性的值,属性不存在会新建并赋值
delattr(object, name) 删除对象中的指定属性的值,不存在会报ArttributeError异常
property(fget,fset,fdel,doc) 返回一个可以设置属性的属性


目录
打赏
0
0
0
0
7
分享
相关文章
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
148 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
47 2
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
3月前
|
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
72 3
|
5月前
|
Python基础---类
【10月更文挑战第10天】Python类的定义
65 2
|
5月前
|
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
50 1
WK
|
5月前
|
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
43 0
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
100 0
|
5月前
|
Python中的类(一)
Python中的类(一)
34 0
|
5月前
|
Python中的类(一)
Python中的类(一)
30 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等