在Python中,使用自定义描述符可以很容易地做到这一点。在

看看HOWTO中的Descriptor Example。如果您只需更改__get__方法来引发一个AttributeError就这样了。我们不妨将其重命名,去掉日志记录,使之更简单。在class WriteOnly(object):

"""A data descriptor that can't be read.

"""

def __init__(self, initval=None, name='var'):

self.val = initval

self.name = name

def __get__(self, obj, objtype):

raise AttributeError("No peeking at attribute '{}'!".format(self.name))

def __set__(self, obj, val):

self.val = val

class MyClass(object):

x = WriteOnly(0, 'x')

m = MyClass()

m.x = 20 # works

print(m.x) # raises AttributeError

请注意,在2.x中,如果您忘记了(object)并创建了一个经典类,描述符将无法工作。(我相信描述符本身可以是经典类…但不要这样做。)在3.x中,没有经典类,所以这不是问题。在

所以,如果这个值是只写的,你会怎么读呢?在

这个玩具例子没用。但是,例如,您可以在obj上而不是在自己身上设置一些私有属性,此时知道数据存储在哪里的代码可以找到它,但是偶然的自省就不能找到它

但你甚至不需要描述符。如果您希望属性只写而不管附加到哪个类,这是一回事,但是如果您只想阻止对特定类的某些成员的读访问,有一种更简单的方法:

^{pr2}$

有关更多详细信息,请参阅文档中data model一章中的__getattr__和__getattribute__文档。在

在2.x中,如果您不使用(object)并创建一个经典类,那么属性查找的规则就完全不同了,而且没有完全文档化,除非您计划在90年代花费大量时间,否则您确实不想学习这些规则,所以……不要这样做。另外,2.x显然需要2.x样式的显式super调用,而不是3.x风格的magicsuper()。在

从capi的角度来看,您已经拥有了大多数相同的钩子,但是它们有点不同。有关详细信息,请参见^{}s,但基本上:tp_getset允许您用getter和setter函数自动构建描述符,这与@property相似,但不完全相同。在

tp_descr_get和{}分别用于构建描述符。在

tp_getattro和tp_setattro与__getattr__和{}相似,只是它们被调用的规则稍有不同,当您知道没有基类需要挂接属性访问时,通常会调用PyObject_GenericGetAttr,而不是委派给{}。在

不过,你为什么要那样做?在

就我个人而言,我做了这样的事情来了解更多关于Python数据模型和描述符的信息,但这并不是把它放在已发布的库中的理由。在

我猜测,往往是因为有人试图在Python上强制错误地基于面向对象的封装(基于传统的C++模型),或者更糟糕的是,试图通过封装来构建java风格的安全性(如果没有安全类加载器和所有附带的加载程序,它们就不起作用)。在

但也有可能有一些通用代码通过内省来使用这些对象,而“欺骗”这些代码可能在某种程度上是有用的,而试图欺骗人类用户却不是这样。例如,想象一下一个序列化库尝试pickle或JSON-ify或其他所有属性。您可以很容易地编写它忽略不可读的属性。(当然,您也可以很容易地做到,比如,忽略前缀为_的属性…)

至于为什么cx_Oracle会这样做……我从来没看过,所以我不知道。在

python只读模式可以打印嘛_只读python属性?无法打印对象相关推荐

  1. 为什么有时优盘是只读模式_u盘怎么解除只读模式

    U盘只读模式困扰着很多的联想windows7系统的用户,因为现在的U盘使用很广,但是如果U盘只读模式就不能再U盘中做任何的事情,那win7系统下怎么去除U盘只读模式就成了大家的问题了,接下来就让小编给 ...

  2. python打印时间_在Python中定义Main函数(第二部分)

    Main函数的最佳实践 既然您已经了解两种执行方式上的差异,那么掌握一些最佳实践方案还是很有用的.它们将适用于编写作为脚本运行的代码或者在另一个模块导入的代码. 如下是四种实践方式: 将大部分代码放入 ...

  3. python如何实现共享报表系统_使用python来实现报表自动化-阿里云开发者社区

    xlwt 常用功能 xlrd 常用功能 xlutils 常用功能 xlwt写Excel时公式的应用 xlwt写入特定目录(路径设置) xlwt Python语言中,写入Excel文件的扩展工具.可以实 ...

  4. truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程

    truncate()方法截断该文件的大小.如果可选的尺寸参数存在,该文件被截断(最多)的大小. 大小默认为当前位置.当前文件位置不改变.注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台 ...

  5. python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码

    摘要:这篇Python开发技术栏目下的"基于Python实现的扫雷游戏实例代码",介绍的技术点是"Python实现.Python.实例代码.扫雷游戏.扫雷.游戏" ...

  6. python基础语法加爬虫精进_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...

    Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...

  7. python语言下划线怎么打_初学Python语言者必须理解的下划线

    下划线(_)在Python语言中有特殊作用. 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此.如果你是一名Python程序员,对于诸如 _ in ra ...

  8. 一个完整的python文件即是一个模块_用python玩转数据|基本语法

    比较运算符 >>>3<4<7 True >>>3<4<1 False >>> 打开文件 >>> f=op ...

  9. 用python制作的游戏有哪些_用 Python 做个简单的井字游戏

    在这个教程中,我将展示如何利用Python来做一个井字游戏.这将包括函数.列表.if语句.while循环.for循环以及错误处理等等. 首先,我们将创建两个函数,第一个函数将会打印出井字游戏的背景模板 ...

  10. python入门必备10个坑_适合 Python 初学者的一些技巧和坑

    前言 前几天董大 @董伟明 的爱派森上线了,还发了一套 PPT 和视频,PPT 共有75页干货,讲了很多进阶的用法,也包括很多坑,非常适合刚入门的同学,免得再踩到. 这里我提取部分非常规的,也就是大部 ...

最新文章

  1. 逻辑结构图向关系转换规则2
  2. Struts2漏洞为互联网带来严重安全风险
  3. selenium环境搭建
  4. 线段树专辑——hdu 1698 Just a Hook
  5. python使用snappy压缩
  6. windows 取色器_这款 Windows 10 官方「外挂」让你取色更便捷
  7. sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘
  8. 官宣!阿里Blink和Flink合并计划出炉
  9. 【BZOJ2330】【tyvj1785】【codevs2404】糖果,第一次的差分约束
  10. ssms,新建查询设置字体_如何在SSMS查询编辑器中使用SQLCMD命令
  11. JSP -java service pages
  12. Windows内核原理与实现之Windows研究内核(WRK)
  13. 利用阿里云免费镜像仓库,实现微服务的k8s部署
  14. 好用的Mac视频下载软件--Downie 4
  15. 阿里开源消息中间件MetaQ(RocketMQ)简介
  16. springboot接口安全性_权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue
  17. 羽绒服行业深度报告:品牌制胜,羽绒服行业如何实现升级之路?-20210104
  18. VSCODE codeforces 插件
  19. android studio 扰码,Visual Studio 调试技巧 (三) -- 调试第三方组件代码
  20. 01-初识 pygame 游戏开发

热门文章

  1. Linux CentOS 查看服务器信息命令及其它常用命令
  2. 昨天安装复习中遇到的问题小结
  3. python地图标注_Python 给定的经纬度标注在地图上的实现方法
  4. Mybatis-jar-lib
  5. python心理学实验程序_心理学实验程序编程(python)
  6. java简单纸牌游戏_活动回顾 | 畅玩法语纸牌游戏
  7. IDBI的完整格式是什么?
  8. printstream_Java PrintStream close()方法与示例
  9. 关于二手交易用户指南怎么写_让用户拍案叫绝文案怎么写?试试这3个方法
  10. dbms数据库管理系统_数据库管理系统(DBMS)中的视图