zoukankan      html  css  js  c++  java
  • 用 Python 的 Descriptor 特性解决一个变态的问题

    Python 中的 Decorator 大家见得多了,但 Descriptor 用过的估计还少,它主要是 Python 自身来实现库的一些特性,比如 staticmethod 之类的,今天有机会学习、试验了 Descriptor,小有所得,跟大家分享。

    今天 Jeff 给我们出了一道难题:有个叫 data 的某个 class 的实例,它有一个 item 属性,它可能是一个对象(姑且假设它是个 str object),也可能是一序列对象(比如 list object),在这个前题下,希望做到以下代码能够工作:

    如果你现在觉得没啥,那肯定是没看仔细。我来提醒一下你,最后一行的 output 居然不是 lai 三个字母分成三行!

    也就是说 data.item 要做到当它是单个元素的时候,普通场合要跟单元元素一样,而迭代的场合,要跟包含多个元素的序列一样!这个要求太变态了。这么有挑战的问题,我马上祭出 python documentation,天不负苦心人,我找到了 Descriptor 这个我以前从未使用过的特性,最后解决了这个问题。详情多讲无益,直接上代码:

    输出:

    最后,多说一句这些代码在 py2.6 和 py3.1 下测试通过,兼容两大版本。

  • 相关阅读:
    最近忙于开发移动OA审批
    开发一个小软件
    VMWare上虚拟机访问宿主机需要注意的一个问题
    Visual Studio 中自带的电子邮件的正则表达式匹配中文的问题 与 \w
    开始应用设计模式
    jQuery与ASP.NET AJAX有冲突吗?
    有感于VMWare
    kvm 母镜像
    相关流程
    master事件处理
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154361.html
Copyright © 2011-2022 走看看