首页 > 其他分享 >面向对象之继承

面向对象之继承

时间:2024-01-13 23:37:57浏览次数:20  
标签:... 继承 self 面向对象 Human class def

【一】什么是继承

  • 新建的类可以继承一个或多个父类,
  • 子类有所有父类有点数据属性和函数属性
  • python中继承被分为单继承和多继承

【二】单继承和多继承

# 定义父类
class Human:
    ...


# 定义父类
class Asia:
    ...


# 单继承
class Chinese(Human):
    ...


# 多继承
class Shanghai(Human, Asia):
    ...

【三】查看继承

class Human:
    ...


# 定义父类
class Asia:
    ...


# 单继承
class Chinese(Human):
    ...


# 多继承
class Shanghai(Asia, Human):
    ...

# __base__只查看从左到右继承的第一个子类,
# __bases__则是查看所有继承的父类
print(Shanghai.__base__)  # <class '__main__.Asia'>
print(Shanghai.__bases__)  # (<class '__main__.Asia'>, <class '__main__.Human'>)

【四】经典类和新式类

  • 只有在python2中才分新式类和经典类

  • 在python2中,没有显示的继承object类的类,以及该类的子类,都是经典类

  • 在python2中,显示的声名继承object的类,以及该类的子类才是新式类

  • 在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类

  • 如果没有指定基类,python的类会默认继承object类,object是所有python类的基类,它提供了一些常见方法(如__str__)的实现。

class Human:
    ...
print(Human.__bases__) # (<class 'object'>,)

【五】继承与抽象(先抽象再继承)

  • 对于生活而言都是有了各种实例才会抽象出类,比如有很多人,所以我们是人类,有很多狗,它们都属于狗类。
  • 但是对于程序而言,是要先抽象出来一个类,才能继承它的属性

【六】继承与重用性

【1】单独成类

  • 不管是哪国人都会可以会 唱 跳 rap 篮球
class Chinese(Human):
    def sing(self):
        ...

    def jump(self):
        ...
    
    def rap(self):
        ...
    
    def basketball(self):
        ...


class Korean(Human):
    def sing(self):
        ...

    def jump(self):
        ...

    def rap(self):
        ...

    def basketball(self):
        ...


class Japanese(Human):
    def sing(self):
        ...

    def jump(self):
        ...

    def rap(self):
        ...

    def basketball(self):
        ...

【2】继承总类

  • 上面可以看出哪国人都会可以会 唱 跳 rap 篮球
  • 而我们却重复了好几遍代码,出现了代码冗余
  • 如果使用继承的思想
    • 人类:唱 跳 rap 篮球
    • 中国人 说中国话 (人类的功能)
    • 韩国人 说韩国话 (人类的功能)
    • 日本人 说日本话 (人类的功能)

【3】代码实现

class Human:
    def __init__(self, name):
        self.name = name

    def sing(self):
        print(f'{self.name}会唱歌')

    def jump(self):
        print(f'{self.name}会跳舞')

    def rap(self):
        print(f'{self.name}会rap')

    def basketball(self):
        print(f'{self.name}会打篮球')


class Chinese(Human):
    ...


class Korean(Human):
    ...


class Japanese(Human):
    ...


chinese_1 = Chinese(name='IKUN')
chinese_1.jump()

标签:...,继承,self,面向对象,Human,class,def
From: https://www.cnblogs.com/Hqqqq/p/17963198

相关文章

  • 面向对象之派生
    【一】什么是派生派生是指子类继承父类,子类多出来自己的属性和方法,并且重用父类的属性和方法【二】派生的方法子类可以派生出自己的新属性,在进行属性查找时,子类的属性名会优先于父类被查找classHuman:location='earth'def__init__(self,country,name):......
  • 面向对象之抽象类
    【一】什么是抽象类抽象类是一种不能被实例化的类,它充当了一种模板或者说是蓝图。在抽象类中,你可以定义一些抽象方法,这些抽象方法没有具体的实现,即没有方法体。它们必须在抽象类的子类中被实现,除非那个子类也是一个抽象类。抽象类可以包含具体方法(已实现的方法)和抽象方法(未实现......
  • 面向对象之多态和鸭子类型
    【一】多态【1】什么是多态指一类事物有很多形态【2】示例比如汽车是一类,它于很多形态,如奔驰宝马奥迪classCar:defrun(self):print('开始跑')classBenz(Car):defrun(self):super().run()print('98加满')classBwm(Car......
  • 面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以判断,取出和修改其本地状态或行为的能力在python中,反射主要是指通过字符串操作对象属性【2】Python中的反射同过字符串的形式操作对象相关的属性python一切皆为对象,都可以使用反射【二】反射方法【1】反射方法介绍getatt......
  • 面向对象之绑定方法和非绑定方法
    【一】绑定方法与非绑定方法介绍【1】绑定方法绑定给谁,谁调用就将谁作为第一个参数传入(1)绑定到类的方法使用classmethod装饰器来装饰将类作为第一个参数传入对象也可调用,会将实例化对象的类作为第一个参数传入(2)绑定到对象的方法通过对象.方法的方法实现,将对象作为......
  • 面向对象之元类
    【一】常用的魔法方法【1】初始化对象的属性__init__【二】元类【1】什么是元类一切源于一句话:Python中一切皆对象八大基本数据类型是对象类实例化得到的对象也是对象其实类本身也是一种对象classHuman:def__init__(self,name,age):self.name=name......
  • 面向对象之封装
    【一】面向对象三大特性面向对象编程有三大特性:封装、继承、多态其中最重要的一个特性就是封装。封装指的就是把数据与功能都整合到一起【1】什么是封装就是对具体对象的一种抽象简单理解就是把不想让别人看到的对象藏起来【2】为什么要封装有些敏感数据不想......
  • 什么是继承
    概念继承的本质是对某一批类的抽象,从而实现对显示世界美好的建模。extends的意思是“扩展”。子类是父类的扩展。JAVA中类只有单继承,没有多继承!一个儿子只能有一个爸爸,但是一个爸爸可以有多个儿子。继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......