Python基础核心经典教程(028)——面向对象特征之继承


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

继承概述

与Java不同,Python不仅可以单继承还可以多继承。

语法

单继承语法如下:

class 类名(父类名):

    pass

多继承语法如下:

class 类名(父类名1, 父类名2...):

    pass

特征

继承的特征如下:

  • 1、子类拥有父类以及父父类非私有的方法和非私有的属性
  • 2、子类可自定义自身与父类以及父父类无关的方法和属性
  • 3、一个父类可以有一个或多个子类
  • 4、一个子类可以有一个或多个父类
  • 5、子类可重写父类的方法
  • 6、子类可扩展父类的方法

单继承示例

在此,以示例形式讲解面向对象的单继承特性。

示例1

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:父类与子类
"""


# 定义动物类(父类)
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print("%s吃食物" % self.name)

    def sleep(self):
        print("%s睡觉" % self.name)


# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
    pass


# 定义猫类(子类)继承自动物类(父类)
class Cat(Animal):
    pass


# 创建子类对象
dog = Dog("tom")
# 获取子类从父类继承的属性
dogName = dog.name
print(dogName)
# 调用子类从父类继承的方法
dog.eat()
dog.sleep()

# 创建子类对象
cat = Cat("mimi")
# 获取子类从父类继承的属性
catName = cat.name
print(catName)
# 调用子类从父类继承的方法
cat.eat()
cat.sleep()

在这里插入图片描述

示例2

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:继承的传递性
"""


# 定义动物类(父类)
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print("%s吃食物" % self.name)

    def sleep(self):
        print("%s睡觉" % self.name)


# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
    pass


# 定义导盲犬(子类)继承自狗类(父类)
class SeeingEyeDog(Dog):
    pass


# 创建子类对象
dog = SeeingEyeDog("jack")
# 获取子类从父父类继承的属性
dogName = dog.name
print(dogName)
# 调用子类从父父类继承的方法
dog.sleep()
dog.eat()

在这里插入图片描述

示例3

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:父类私有方法与私有属性
"""


# 定义父亲类(父类)
class Father:
    def __init__(self):
        self.money = 10000
        # 私有属性
        self.__diary = "Father diary"

    def eat(self):
        print("吃饭")

    # 私有方法
    def __secretLove(self):
        print("暗恋史")


# 定义儿子类(子类)
class Son(Father):
    pass


# 创建子类对象
son = Son()
# 获取子类从父类继承的非私有属性
money = son.money
print(money)
# 获取子类从父类继承的私有属性
# 报错:AttributeError: 'Son' object has no attribute '__diary'
# diary=son.__diary
# print(diary)

# 调用子类从父类继承的非私有方法
son.eat()

# 调用子类从父类继承的私有方法
# 报错:AttributeError: 'Son' object has no attribute '__secretLove'
# son.__secretLove()

在这里插入图片描述

super与super( )

在Python中super是一个非常特殊的类,它表示子类的父类。super() 就是使用 super 类创建出来的对象。所以,我们可在需要的位置使用 super().父类方法 的方式调用父类方法的;示例如下:

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:super与super()
"""


# 定义动物类(父类)
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print("%s吃食物" % self.name)

    def sleep(self):
        print("%s睡觉" % self.name)


# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
    # 子类重写父类方法
    def eat(self):
        # 调用父类的eat方法
        super().eat()
        print("%s吃骨头" % self.name)
    pass


# 创建子类对象
dog = Dog("tom")
dog.eat()

在这里插入图片描述

多继承示例

在此,以示例形式讲解面向对象的多继承特性;示例如下:

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:多继承
"""


# 定义父亲类(父类)
class Father:
    def __init__(self):
        self.money = 10000

    def play(self):
        print("打牌")


class Mother:
    def __init__(self):
        self.car = "red car"

    def cook(self):
        print("做饭")


# 定义同时继承自Father和Mother的儿子类(子类)
class Son(Father, Mother):
    def __init__(self):
        # 调用父类的__init__方法
        Father.__init__(self)
        Mother.__init__(self)
    pass


# 创建子类对象
son = Son()
money = son.money
print(money)
car = son.car
print(car)
son.play()
son.cook()

在这里插入图片描述

object与_ _ bases _ _

在Python中object是所有对象的基类。如果一个类没有明确的父类,那么该类的默认父类就是object。

Python为所有类都提供了一个_ _ bases _ _属性,通过该属性可以查看该类的所有直接父类。

"""
原创作者:谷哥的小弟
博客地址:http://blog.csdn.net/lfdfhl
示例描述:面向对象三大特征——继承:object与__bases__
"""


# 定义动物类(父类)
class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print("%s吃食物" % self.name)

    def sleep(self):
        print("%s睡觉" % self.name)


# 定义狗类(子类)继承自动物类(父类)
class Dog(Animal):
    pass


# 获取Dog类的父类
dogBases = Dog.__bases__
print(dogBases)
# 获取Animal类的父类
animalBases = Animal.__bases__
print(animalBases)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lfdfhl/article/details/106116434