Python面向对象 -- 单继承背景下的属性值查找

本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

​https://pan.quark.cn/s/493ae5f21f26​

在面向对象编程中,继承是一个重要的概念,它允许子类继承父类的属性和方法,从而实现代码的重用和扩展。然而,在继承过程中,如果子类和父类具有相同名称的属性,Python会优先使用子类自身的该属性值。这一行为体现了Python中关于属性查找的多层次机制,即从当前类开始,逐级向上层继承类搜索直至找到该属性的定义。

00:00 - 面向对象单继承下属性查找与覆盖

属性查找机制

在Python中,当子类继承自父类时,属性查找遵循以下顺序:

  1. 首先在子类中查找该属性。
  2. 如果子类中没有该属性,则向上查找父类中的属性。
  3. 如果父类中也没有该属性,则继续向上查找,直到找到该属性或到达基类(通常为​​object​​)。

属性覆盖

子类可以通过定义与父类相同名称的属性来覆盖父类的属性。这样,当访问该属性时,Python会优先使用子类中的属性值。

class Parent:
    def __init__(self):
        self.name = "Parent"

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.name = "Child"

parent = Parent()
child = Child()

print(parent.name)  # Output: Parent
print(child.name)   # Output: Child

使用​​super​​关键字

​super​​关键字用于调用父类的方法和访问其属性。通过​​super​​,子类可以在保留父类行为的基础上,添加或修改特定的属性值。

class Parent:
    def __init__(self):
        self.name = "Parent"

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.name = "Child"

    def display_name(self):
        print(f"Child's name: {self.name}")
        print(f"Parent's name: {super().name}")

child = Child()
child.display_name()
# Output:
# Child's name: Child
# Parent's name: Parent

01:57 - Python中的类继承与属性查找机制

继承层次结构

在Python中,类之间的继承关系形成了一个层次结构。当一个类继承另一个类时,它将获得其父类的所有属性和方法。

class Grandparent:
    def __init__(self):
        self.name = "Grandparent"

class Parent(Grandparent):
    def __init__(self):
        super().__init__()
        self.name = "Parent"

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.name = "Child"

child = Child()
print(child.name)  # Output: Child

属性查找顺序

如果子类和父类均拥有相同名称的属性,则优先使用子类自身的该属性值。若子类没有此属性,则继续向上层继承类查找,直至达到基类(通常为​​object​​)。

class Grandparent:
    def __init__(self):
        self.name = "Grandparent"

class Parent(Grandparent):
    def __init__(self):
        super().__init__()
        self.name = "Parent"

class Child(Parent):
    def __init__(self):
        super().__init__()
        self.name = "Child"

child = Child()
print(child.name)  # Output: Child

# Removing the name attribute from Child
del child.name
print(child.name)  # Output: Parent

# Removing the name attribute from Parent
del child.name
print(child.name)  # Output: Grandparent

总结

在Python面向对象编程中,单继承背景下的属性值查找遵循从当前类开始,逐级向上层继承类搜索的机制。子类可以通过定义与父类相同名称的属性来覆盖父类的属性,从而实现灵活的功能扩展和定制。使用​​super​​关键字可以调用父类的方法和访问其属性,同时也能够有选择地覆盖部分属性,进一步增强了面向对象设计的灵活性和可维护性。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值