返回介绍

公有声明的泛化

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

既然有了一个Private实现,泛化其代码以考虑Public声明就很简单了——它们基本上是Private声明的反过程,因此,我们只需要取消内部测试。本节列出的实例允许一个类使用装饰器来定义一组Private或Public的实例属性(存储在一个实例上的属性,或者从其类继承的属性),使用如下的语法:

·Private声明类实例的那些不能获取或赋值的属性,而从类的方法的代码内部获取或赋值除外。也就是说,任何声明为Private的名称都不能从类的外部访问,而任何没有声明为Private的名称都可以自由地从类的外部获取或赋值。

·Public声明了一个类的实例属性,它可以从类的外部以及在类的方法内部获取和访问。也就是说,声明为Public的任何名称,可以从任何地方自由地访问,而没有声明为Public的任何名称,不能从类的外部访问。

Private和Public声明规定为互斥的:当使用了Private,所有未声明的名称都被认为是Public的;并且当使用了Public,所有未声明的名称都被认为是Private。它们基本上相反,尽管未声明的、不是由类方法创建的名称行为略有不同——它们可以赋值并且由此从类的外部在Private之下创建(所有未声明的名称都是可以访问的),但不是在Public下创建的(所有未声明的名称都是不可访问的)。

再一次,自己研究这些代码并体验它们是如何工作的。注意,这个方案在顶层添加了额外的第四层状态保持,超越了前面描述的3个层次:lambda所使用的测试函数保存在一个额外的封闭作用域中。这个示例编写为可以在Python 2.6或Python 3.0下运行,尽管它在Python 3.0下运行的时候带有一个缺陷(在文件的文档字符串之后简短地说明,并且在代码之后详细说明):

参见前面示例的self测试代码,它是一个用法示例。这里在交互提示模式下快速地看看这些类装饰器的使用(它们在Python 2.6和Python 3.0下一样地工作),正如所介绍的那样,非Private或Public名称可以从主体类之外访问和修改,但是Private或非Public的名称不可以:

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

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

发布评论

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