首页 > 其他分享 >面向对象之派生

面向对象之派生

时间:2024-01-13 23:37:29浏览次数:24  
标签:__ name language 派生 country self 面向对象 init

【一】什么是派生

  • 派生是指子类继承父类,子类多出来自己的属性和方法,并且重用父类的属性和方法

【二】派生的方法

  • 子类可以派生出自己的新属性,在进行属性查找时,子类的属性名会优先于父类被查找
class Human:
    location = 'earth'

    def __init__(self, country, name):
        self.country = country
        self.name = name


class Chinese(Human):

    def __init__(self,country,name,language):
        self.country = country
        self.name = name
        self.language = language

    def speak(self):
        print(f'{self.name}说{self.language}')


people_1 = Chinese(name='green',country='中国',language='中文')
people_1.speak()

  • 很明显子类Chinese里面的__init__方法里面的前两行都是重复代码
  • 若想在子类派生出的方法内重用父类的功能,有两种实现方法

【1】指名道姓的调用某一个类的函数

class Human:
    location = 'earth'

    def __init__(self, country, name):
        self.country = country
        self.name = name


class Chinese(Human):

    def __init__(self,country,name,language):
        Human.__init__(self, country, name)
        self.language = language

    def speak(self):
        print(f'{self.name}说{self.language}')


people_1 = Chinese(name='green',country='中国',language='中文')
people_1.speak()

【2】超类(super())

  • 调用super()会得到一个特殊的对象
  • 该对象专门用来引用父类的属性
  • 且严格按照MRO规定的顺序向后查找
class Human:
    location = 'earth'

    def __init__(self, country, name):
        self.country = country
        self.name = name


class Chinese(Human):

    def __init__(self, country, name, language):
        super().__init__(country, name)
        self.language = language

    def speak(self):
        print(f'{self.name}说{self.language}')


people_1 = Chinese(name='green', country='中国', language='中文')
people_1.speak()
  • 当使用super()函数时,Python会在MRO列表上继续搜索下一个类

【3】小结

  • 这两种方式的区别是:
    • 方式一是跟继承没有关系的,而方式二的super()是依赖于继承的
    • 并且即使没有直接继承关系,super()仍然会按照MRO继续往后查找

标签:__,name,language,派生,country,self,面向对象,init
From: https://www.cnblogs.com/Hqqqq/p/17963199

相关文章

  • 面向对象之抽象类
    【一】什么是抽象类抽象类是一种不能被实例化的类,它充当了一种模板或者说是蓝图。在抽象类中,你可以定义一些抽象方法,这些抽象方法没有具体的实现,即没有方法体。它们必须在抽象类的子类中被实现,除非那个子类也是一个抽象类。抽象类可以包含具体方法(已实现的方法)和抽象方法(未实现......
  • 面向对象之多态和鸭子类型
    【一】多态【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】为什么要封装有些敏感数据不想......
  • 什么是面向对象
    面向过程&面向对象面向过程思想按顺序进行,线性思维步骤清晰简单,第一步做什么,第二步做什么……面对过程适合处理一些较为简单的问题面向对象思想属性加方法变成一个类物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最......
  • Python面向对象之反射
    【一】反射【1】什么是反射反射是一种程序可以访问、检测和修改其本身状态或行为的能力。在Python中,反射主要指通过字符串的形式操作对象的属性。【2】Python中的反射通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)【二】反射方法......
  • Python面向对象之派生
    派生【一】概要"派生"(Derivation)是指在面向对象编程中,通过创建新的类,基于已有的类(通常称为父类或基类)来构建新的类,以获取和扩展父类的属性和方法。在这个过程中,新创建的类称为子类或派生类。通俗来讲,派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法【......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......