07_继承与访问修饰符

在这里插入图片描述


博文配套视频课程:24小时实现从零到AI人工智能


对象继承实现

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。通过继承创建的新类称为子类或派生类,被继承的类称为基类、父类或超类

class Animal():
    # 特殊方法,主要完成对象创建赋值
    def __init__(self, age):
        # 下划线开始和结束的方法,属性我们称为特殊方法和特殊属性
        # 单下划线开始受保护的属性或者方法(本身和子类才能访问),双下划线开始则私有属性(自己才能访问)
        self.age = age

    def show(self):
        print(f'年龄为:{self._age}')


# 定义子类(Dog),它继承动物类, Python支持多继承
class Dog(Animal):
    # 子类可能也有自己的属性
    def __init__(self, name, age):
        # super代表的是被继承的父类
        # 父类的属性要通过父类初始化方法来完成
        super().__init__(age)
        self.name = name

# 如果当前模块主模块,则返回为__main__,否则返回当前模块路径
if __name__ == "__main__":
    animal = Animal(10)
    animal.show()
    # 创建一个子类的对象
    dog = Dog('旺财', 3)
    # 子类的对象无条件使用父类的方法,但是父类方法并不能输出name属性值
    dog.show()

子类重写父类方法

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法

# 定义子类(Dog),它继承动物类, Python支持多继承
class Dog(Animal):
    # 子类可能也有自己的属性
    def __init__(self, name, age):
        # super代表的是被继承的父类
        # 父类的属性要通过父类初始化方法来完成
        super().__init__(age)
        self.name = name

    # 如果父类的方法不适合子类,则子类可以重新定义(重写)
    # 子类的方法名称,参数都必须和父类相同
    # 根据就近原则
    def show(self):
        print(f'年龄为:{self._age},姓名为:{self.name}')


# 如果当前模块主模块,则返回为__main__,否则返回当前模块路径
if __name__ == "__main__":
    # 创建一个子类的对象
    dog = Dog('旺财', 3)
    # 子类的对象无条件使用父类的方法
    dog.show()  # 年龄为:3,姓名为:旺财

私有与保护属性

那种仅限从一个对象内部访问的“私有”实例变量在 Python 中并不存在。 但是,大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 (例如 _age) 则是受保护的属性,只有当前类和子类可以访问

class Animal():
    # 特殊方法,主要完成对象创建赋值
    def __init__(self, age):
        # 单下划线开始受保护的属性或者方法(本身和子类才能访问),双下划线开始则私有属性(自己才能访问)
        self._age = age

    def show(self):
        print(f'年龄为:{self._age}')


# 定义子类(Dog),它继承动物类, Python支持多继承
class Dog(Animal):
    # 子类可能也有自己的属性
    def __init__(self, name, age):
        # super代表的是被继承的父类
        # 父类的属性要通过父类初始化方法来完成
        super().__init__(age)
        self.name = name

    # 如果父类的方法不适合子类,则子类可以重新定义(重写)
    # 子类的方法名称,参数都必须和父类相同
    # 根据就近原则
    def show(self):
        print(f'年龄为:{self._age},姓名为:{self.name}')


# 如果当前模块主模块,则返回为__main__,否则返回当前模块路径
if __name__ == "__main__":
    # 创建一个子类的对象
    dog = Dog('旺财', 3)
    # 子类的对象无条件使用父类的方法
    dog.show()  # 年龄为:3,姓名为:旺财

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值