python只读属性怎么设置_Python 定义只读属性的实现方式
Python是面向对象(OOP)的语言, 而且在OOP这条路上比Java走得更彻底, 因为在Python里, 一切皆对象, 包括int, float等基本数据类型.
在Java里, 若要为一个类定义只读的属性, 只需要将目标属性用private修饰, 然后只提供getter()而不提供setter(). 但Python没有private关键字, 如何定义只读属性呢? 有两种方法, 第一种跟Java类似, 通过定义私有属性实现. 第二种是通过__setattr__.
通过私有属性
用私有属性+@property定义只读属性, 需要预先定义好属性名, 然后实现对应的getter方法.
class Vector2D(object):
def __init__(self, x, y):
self.__x = float(x)
self.__y = float(y)
@property
def x(self):
return self.__x
@property
def y(self):
return self.__y
if __name__ == "__main__":
v = Vector2D(3, 4)
print(v.x, v.y)
v.x = 8 # error will be raised.
输出:
(3.0, 4.0)
Traceback (most recent call last):
File ...., line 16, in
v.x = 8 # error will be raised.
AttributeError: can't set attribute
可以看出, 属性x是可读但不可写的.
通过__setattr__
当我们调用obj.attr=value时发生了什么?
很简单, 调用了obj的__setattr__方法. 可通过以下代码验证:
class MyCls():
def __init__(self):
pass
def __setattr__(self, f, v):
print 'setting %r = %r'%(f, v)
if __name__ == '__main__':
obj = MyCls()
obj.new_field = 1
输出:
setting 'new_field' = 1
所以呢, 只需要在__setattr__ 方法里挡一下, 就可以阻止属性值的设置, 可谓是釜底抽薪.
代码:
# encoding=utf8
class MyCls(object):
readonly_property = 'readonly_property'
def __init__(self):
pass
def __setattr__(self, f, v):
if f == 'readonly_property':
raise AttributeError('{}.{} is READ ONLY'.\
format(type(self).__name__, f))
else:
self.__dict__[f] = v
if __name__ == '__main__':
obj = MyCls()
obj.any_other_property = 'any_other_property'
print(obj.any_other_property)
print(obj.readonly_property)
obj.readonly_property = 1
输出:
any_other_property
readonly_property
Traceback (most recent call last):
File "...", line 21, in
obj.readonly_property = 1
...
AttributeError: MyCls.readonly_property is READ ONLY
以上这篇Python 定义只读属性的实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持python博客。
python只读属性怎么设置_Python 定义只读属性的实现方式相关推荐
- python坐标轴刻度设置_Python Matplotlib 设置x/y坐标轴刻度
刻度设置 参考文档: xticks 命令 yticks 命令 以xticks为例: matplotlib.pyplot.xticks(args, *kwargs) 获取或者设置当前刻度位置和文本的 x ...
- python权限管理设置_python权限管理框架
Python生成管理员权限的可执行程序 如何使用pyinstaller或者其他生成一个有管理员权限的可执行程序,生成的我也遇到这个问题了. Python权限修饰正确的是? A. 标识符开头无下划线,该 ...
- python画图颜色设置_python画图常规设置方式
python绘图的包大家应该不会陌生,但是,对图的常规设置不一定会知道(其实自己也是才知道的),比如:坐标轴的字体大小.颜色设置:标题的字体颜色大小设置:线的粗细.颜色:图片风格的设置等.了解这些常规 ...
- python prettytable格式设置_Python prettytable的使用方法
原博文 2015-10-22 19:09 − ###Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+---- ...
- python只读属性怎么设置_python 设置只读属性(property或者__setter__方法)
python设置只读属性的方式有两种 1.通过property装饰器和私有属性配合完成只读属性 2.借助__setter__方法,设置逻辑阻止赋值 方式一: class Task(object): d ...
- python画图颜色设置_python画图--输出指定像素点的颜色值方法
python画图--输出指定像素点的颜色值方法 如下所示: # -*- coding: utf-8 -*- #--------------------------------------------- ...
- python画图颜色设置_python画图自定义colorbar
作者:ahworld 链接:python画图自定义colorbar 来源:微信公众号-seqyuan 著作权归作者所有,任何形式的转载都请联系作者. 自定义colorbar包含两方面: 自定义colo ...
- python坐标轴刻度设置_Python之坐标轴刻度细化、坐标轴设置、标题图例添加
原博文 2018-03-20 16:41 − 学习python中matplotlib绘图设置坐标轴刻度.文本 http://www.jb51.net/article/134638.htm Python ...
- 定义python的色条_Python:定义颜色曲线部分
我试图复制以下数字: 颜色渐变从蓝色变为红色,表示材质的状态.我现在可以绘制每条曲线.每条直线由两点定义,然后使用pyplot(matplotlib库)简单地绘制.对于如何计算关联值,我也有一个清晰的 ...
最新文章
- QCon北京2015:18个热门专题,出品人全部确认,新版网站上线
- 鸿蒙系统明年上市巧,鸿蒙系统官网下载-鸿蒙系统官网下载手机版 v2.0下载-955游戏网...
- Lesson 6. Scikit-Learn使用与进阶
- 中国SaaS死或生之四:卧榻之侧,是谁在捅刀 SaaS?
- java 部分正确性_深入理解java快速排序的正确性
- 查看网卡[网络接口]
- linux 向程序发送信号,Linux下的信号处理
- CVPR 9999 Best Paper——《一种加辣椒的番茄炒蛋》
- Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
- React-Error
- 电信猫不折旧,用了几年还是原价
- 一个企图用代码偷懒计算测量学闭合导线各项数据的屑是否有错
- SQL数据分析常用案例总结
- cmd中start 命令用法
- 黑少微服务商店实战经验分享:从单体式架构迁移到微服务架构
- 黑盒测试 之 因果图法
- 大咖访谈丨金星分享2020年直播数据,助农产品如何走上产销快车道
- 听不够的三国,淡淡的乡愁
- Paho Java Client 连接阿里云物联网平台
- kali密码破解笔记
热门文章
- 计算机技术在生物教学中应用,信息技术在生物课堂教学中的应用
- gregorian(格里高力)历转换公历
- 如何在flash中实现播放控制?
- 关于uni-app的ui库、ui框架、ui组件
- 【Java】JAVA枚举类型
- IT学习的网站和工具
- The Shawshank Redemption-7
- SharpDevelop 简介
- 米尔基于ARM架构核心板的国产化EtherCAT主站控制器解决方案
- e480换高分屏_ThinkPadE480电脑(i5-8250u 8G内存 256G固态 高分屏0QCD 14英寸) 京东5699元...