返回介绍

继承

发布于 2024-01-29 22:24:15 字数 1040 浏览 0 评论 0 收藏 0

像class语句这样的命名空间工具的重点就是支持变量名继承。本节扩展了Python中关于属性继承的一些机制和角色。

在Python中,当对对象进行点号运算时,就会发生继承,而且涉及了搜索属性定义树(一或多个命名空间)。每次使用object.attr形式的表达式时(object是实例或类对象),Python会从头至尾搜索命名空间树,先从对象开始,寻找所能找到的第一个attr。这包括在方法中对self属性的引用。因为树中较低的定义会覆盖较高的定义,继承构成了专有化的基础。

属性树的构造

图28-1总结命名空间树构造以及填入变量名的方式。通常来说:

图 28-1 程序代码会在内存中创建对象树,这个树是通过属性继承搜索的。调用类会创建记忆了这个类的新的实例。执行class语句会创建新的类,而列在class语句首行括号内的类则成为超类。即使self属性位于类的方法内每个属性引用,都会触发由下至上的树搜索

·实例属性是由对方法内self属性进行赋值运算而生成的。

·类属性是通过class语句内的语句(赋值语句)而生成的。

·超类的连接是通过class语句首行的括号内列出类而生成的。

结果就是连接实例的属性命名空间树,到产生它的类、再到类首行中所列出的所有超类。每次以点号运算从实例对象取出属性名称时,Python会向上搜索树,从实例直到超类[1]

[1]这样的说明并不完整,因为我们也可以在class语句外,给对象做赋值来创建实例和类属性,但是,这么做比较少见,也易于出错(修改并非与class语句无关)。在Python中,默认所有的属性都是可读取的。我们会在第26章再谈变量名的私有性。在第29章学习__setattr__的时候,在第30章,当我们遇到__X名称的时候,以及在第38章再次遇到__X名称的时候(在那里,我们将用一个类装饰器来实现它),我们将更多地讨论属性名称私有性。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文