python入门——P46魔法方法:描述符(Property的原理)
描述符
描述符就是将某种特殊类型的类的实例,指派给另一个类的属性。
特殊类型:
__get_(self, instance, owner)
用于访问属性,返回属性的值
__set_(self, instance, value)
将在属性分配操作中调用,不会返回任何内容
__del__(self, instance)
控制删除操作,不返回任何内容
各个属性内容,调用方法如下:
class MyDecriptor():def __get__(self, instance, value):print("get:", self, instance, value)def __set__(self, instance, value):print("set:", self, instance, value)def __delete__(self, instance):print("delete:", self, instance)class Test():x = MyDecriptor()t1 = Test()
t1.x
t1.x = "sd"
del t1.x
get: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88> <class '__main__.Test'>
set: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88> sd
delete: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88>
定义一个温度类,再定义两个描述符类来摄氏度和华氏度,你可以给摄氏度属性赋值,打印的华氏度属性是自动转换的结果
class Celsuis():def __init__(self, value = 30):self.value = float(value)def __get__(self, instance, owner):return self.valuedef __set__(self, instance, value):self.value = float(value)class Fahrenheit():def __get__(self, instance, owner):return instance.cel * 1.8 + 32def __set__(self, instance, value):instance.cel = (float(value)-32)/1.8class Tempterature():cel = Celsuis()fah = Fahrenheit()temp = Tempterature()
temp.cel = 40
print(temp.fah)
temp.fah = 200
print(temp.cel)
104.0
93.33333333333333
python入门——P46魔法方法:描述符(Property的原理)相关推荐
- python入门——P41魔法方法:构造和析构
魔法方法总是被双下划线包围 魔法方法是面向对象Python的一切 魔法方法的强大,体现在他们总能在合适的时候自动调用 __init__(self[, -]) 在实例被构造初始就需要属性,对一个对象进行 ...
- python入门——P45魔法方法:属性访问
下面是通过property访问属性的用法 class C():def __init__(self, size=10):self.size = sizedef getsize(self):return ...
- python入门——P48魔法方法:迭代器
迭代 上一次的输出,作为下一次的输入,返回自身,代码如下 dic = {"00":"a", "01":"b", &quo ...
- python入门——P47魔法方法:定制序列
容器类型的协议 希望容器不可变,则只需定义__len_()和__getitem_()方法 如果希望容器可变,除了上面两个,还需要__setitem_()和__delitem_()两个方法 编写一个不可 ...
- python入门——P43魔法方法:算数运算2
改写魔法方法,下发代码把int类的加减进行了互换 class New_num(int):def __add__(self, other):return int.__sub__(self, other) ...
- python入门——P42魔法方法:算数运算1
下面是算数运算的一些魔法方法 我们接下来可以做个小改变 class New_num(int):def __add__(self, other):return int.__sub__(self, oth ...
- python入门——P44魔法方法:简单定制
写个计时器的类 import time as t class Mytimer():def __init__(self):self.unit = ["year", "mou ...
- python类的魔法方法基础
参考:小甲鱼视频 作用:对类进行"刷机"级的修改 魔法方法的标志:①被__xxx__两条下划线包围:如典型的__init__ 1.__init__(self,....) 问:在定义 ...
- 刻意练习:Python基础 -- Task11. 魔法方法
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
最新文章
- 用1天快速上手org-mode(windows系统)
- 金蝶API apiEnv.apiSession.Token = GetToken()报错
- css表单发光,表单input选中后发光CSS怎么写
- SQL Server in Docker - 还原数据库
- pythonsocket自动化教程_Python 的 Socket 编程教程
- 两套苹果CMS付费模板:MXone自适应模板+仿电影先生2.0
- 二维数组最大连通子数组之和
- rqnoj 愚蠢的矿工
- MyBatis_Generator的使用(实践)
- torch.backends.cudnn.enabled = False会引起CUDA out of memory和CUDA error: an illegal memory access was
- YARN REST API
- php 新浪ip接口,php利用新浪接口查询ip获取地理位置示例
- 广播接收器动态静态注册
- DOS命令和linux
- 简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
- 服务器端解压rar文件多次失败问题解决
- nginx配置文件总结
- JavaScript -- jQuery网页开发案例笔记
- 利用Docker创建镜像运行jar包
- yolov5从入门到精通
热门文章
- MySQL02:DQL语言的学习
- zb怎么做渲染图_如何在ZBrush中渲染漫画风格的插画
- mysql noinstall 5.5_mysqlnoinstall 手动安装
- 光储充一体化充电站_【储能项目】国家电网与浙江瓯江口新区共建光储充一体化充电站项目...
- fastJson工具类
- mongoose的操作及其常用命令
- python 六剑客(匿名函数和内建函数)
- 【leetcode 简单】第十七题 x 的平方根
- javascript自制函数图像生成器
- day18-事务与连接池 1.复习