博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]一个python‘非多态’的问题
阅读量:6417 次
发布时间:2019-06-23

本文共 1109 字,大约阅读时间需要 3 分钟。

  hot3.png

Properties are just one application of Python ubiquitous proxying. The properties are created as wrappers over get/set methods:
class C(object):    def __init__(self, value):        self._value = value    def _get_value(self):        return self._value    value = property(_get_value)# all is fine, value calls C._get_value:assert C(10).value == 10
Here is what's happening: an instance of a property class is created and a reference to C._get_value is stored in it. Next time c.value is referenced, the property calls the original method.
The problem is, the reference is bound to the particular class C, and so if you inherit from it, you should not expect the property to be rebound to the ancestor class'es method:
class D(C):    def _get_value(self):        return self._value + 1 # now, this still calls C._get_value:assert D(10).value != 11
The properties are thus non-polymorphic. There is one way to make them such by introducing late binding,
class C(object):    ...    value = property(lambda self: self._get_value())
but I personally find it cumbersome.

转载于:https://my.oschina.net/orion/blog/41372

你可能感兴趣的文章
linux字符界面下root用户无法登录成功
查看>>
改变背景 自适应高度
查看>>
js 检查字符串中是否包含中文(正则)
查看>>
hello spring boot neo4j
查看>>
shell与if相关参数
查看>>
通过ipmitool监控机房内服务器温度
查看>>
细说容灾备份的等级和技术
查看>>
从windows server的文件服务到分布式文件服务(五)
查看>>
ansj分词
查看>>
如何理解Spring的控制反转IOC和依赖注入DI思想
查看>>
权限设计中的数据灵活存储设计策略参考[以不变应万变]
查看>>
好博客
查看>>
我的友情链接
查看>>
linux第四课
查看>>
【Sensors】原始GNSS测量(6)
查看>>
JAVA 初始化顺序
查看>>
Foxmail 邮箱配置 腾讯企业邮箱
查看>>
MySQL升级的3种方法
查看>>
基于网络设备的安全访问控制总结及案例
查看>>
规则引擎如何操作内存表学习
查看>>