返回介绍

模拟实例属性的私有性:第一部分

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

下列程序代码把上一个例子通用化了,让每个子类都有自己的私有变量名列表,这些变量名无法通过其实例进行赋值。

实际上,这是Python中实现属性私有性(也就是无法在类外对属性名进行修改)的首选方法。虽然Python不支持private声明,但类似这种技术可以模拟其主要的目的。不过,这只是一部分的解决方案。为使其更有效,必须增强它的功能,让子类也能够设置私有属性,并且使用__getattr__和包装(有时称为代理)来检测对私有属性的读取。

我们将推迟到第38章再给出属性私有性的一个更完整的解决方案,在那里,我们将使用类装饰器来更加通用地拦截和验证属性。即使私有性可以以此方式模拟,但实际应用中几乎不会这么做。不用private声明,Python程序员就可以编写大型的OOP软件框架和应用程序:这是关于访问控制的一般意义上的、有趣的发现,超出了我们这里的介绍范围。

捕捉属性引用值和赋值,往往是很有用的技术。这可支持委托,也是一种设计技术,可以让控制器对象包裹内嵌的对象,增加新行为,并且把其他运算传回包装的对象(第30章会再谈委托和包装)。

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

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

发布评论

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