描述符

描述符就是将某种特殊类型的类的实例,指派给另一个类的属性。
特殊类型:
__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的原理)相关推荐

  1. python入门——P41魔法方法:构造和析构

    魔法方法总是被双下划线包围 魔法方法是面向对象Python的一切 魔法方法的强大,体现在他们总能在合适的时候自动调用 __init__(self[, -]) 在实例被构造初始就需要属性,对一个对象进行 ...

  2. python入门——P45魔法方法:属性访问

    下面是通过property访问属性的用法 class C():def __init__(self, size=10):self.size = sizedef getsize(self):return ...

  3. python入门——P48魔法方法:迭代器

    迭代 上一次的输出,作为下一次的输入,返回自身,代码如下 dic = {"00":"a", "01":"b", &quo ...

  4. python入门——P47魔法方法:定制序列

    容器类型的协议 希望容器不可变,则只需定义__len_()和__getitem_()方法 如果希望容器可变,除了上面两个,还需要__setitem_()和__delitem_()两个方法 编写一个不可 ...

  5. python入门——P43魔法方法:算数运算2

    改写魔法方法,下发代码把int类的加减进行了互换 class New_num(int):def __add__(self, other):return int.__sub__(self, other) ...

  6. python入门——P42魔法方法:算数运算1

    下面是算数运算的一些魔法方法 我们接下来可以做个小改变 class New_num(int):def __add__(self, other):return int.__sub__(self, oth ...

  7. python入门——P44魔法方法:简单定制

    写个计时器的类 import time as t class Mytimer():def __init__(self):self.unit = ["year", "mou ...

  8. python类的魔法方法基础

    参考:小甲鱼视频 作用:对类进行"刷机"级的修改 魔法方法的标志:①被__xxx__两条下划线包围:如典型的__init__ 1.__init__(self,....) 问:在定义 ...

  9. 刻意练习:Python基础 -- Task11. 魔法方法

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

最新文章

  1. 用1天快速上手org-mode(windows系统)
  2. 金蝶API apiEnv.apiSession.Token = GetToken()报错
  3. css表单发光,表单input选中后发光CSS怎么写
  4. SQL Server in Docker - 还原数据库
  5. pythonsocket自动化教程_Python 的 Socket 编程教程
  6. 两套苹果CMS付费模板:MXone自适应模板+仿电影先生2.0
  7. 二维数组最大连通子数组之和
  8. rqnoj 愚蠢的矿工
  9. MyBatis_Generator的使用(实践)
  10. torch.backends.cudnn.enabled = False会引起CUDA out of memory和CUDA error: an illegal memory access was
  11. YARN REST API
  12. php 新浪ip接口,php利用新浪接口查询ip获取地理位置示例
  13. 广播接收器动态静态注册
  14. DOS命令和linux
  15. 简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 DW个人网站制作成品 web网页制作与实现
  16. 服务器端解压rar文件多次失败问题解决
  17. nginx配置文件总结
  18. JavaScript -- jQuery网页开发案例笔记
  19. 利用Docker创建镜像运行jar包
  20. yolov5从入门到精通

热门文章

  1. MySQL02:DQL语言的学习
  2. zb怎么做渲染图_如何在ZBrush中渲染漫画风格的插画
  3. mysql noinstall 5.5_mysqlnoinstall 手动安装
  4. 光储充一体化充电站_【储能项目】国家电网与浙江瓯江口新区共建光储充一体化充电站项目...
  5. fastJson工具类
  6. mongoose的操作及其常用命令
  7. python 六剑客(匿名函数和内建函数)
  8. 【leetcode 简单】第十七题 x 的平方根
  9. javascript自制函数图像生成器
  10. day18-事务与连接池 1.复习