描述符就是将某种特殊类型的类的实例指派给另一个类的属性

例如下面的示例

class MyDecriptor():

def get(self,instance,owner):

print("getting...",self,instance,owner)

def __set__(self,instance,value):
print("setting...",self,instance,value) def __delete__(self,instance):
print("delete...",self,instance)

class Test():

x = MyDecriptor()//就是把MyDecriptor的实例指派给了Test类的属性x

porperty 的原理

class MyPorperty():

def init(self,fget,fset,fdel):#fget,fset,fdel都是函数

self.fget = fget

self.fset = fset

self.fdel = fdel

def __get__(self,instance,owner):
return self.fget(instance) def __set__(self,instance,value):
self.fset(instance,value) def __deleted__(self,instance):
self.fdel(instance)

class C():

def init(self):

self._x = None

def getX(self):

return self._x

def setX(self,value):

self._x = value

def delX(self):

del self._x

    x = MyPorperty(getX,setX,delX)//getX对应的函数是fget,setX对应的函数是fset,delX对应的函是fdel

例子 摄氏温度和华氏温度的转变

class Celsius():

def init(self,value = 26.0):

self.value = float(value)

def __get__(self,instance,owner):
return self.value def __set__(self,instance,value):
self.value = float(value)

class Fahrenheit():

def get(self,instance,owner):#摄氏度转换成华氏度

return instance.cel * 1.8 + 32

def __set__(self,instance,value):#华氏度转换成摄氏度
instance.cel = (float(value) - 32) / 1.8

class Temperature():

cel = Celsius()

fah = Fahrenheit()

python 之魔法方法的更多相关文章

  1. python之魔法方法介绍

    1.1. 简介 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的(比如 __init__ , __lt__ ) ...

  2. Python的魔法方法 .

    基本行为和属性 __init__(self[,....])构造函数 . 在实例化对象的时候会自动运行 __del__(self)析构函数 . 在对象被回收机制回收的时候会被调用 __str__(sel ...

  3. 【Python】 魔法方法

    魔法方法 这个名字真的很中二有没有 = =(或者说翻译气息太浓了,作为一个学外语的看到这种真是想吐槽的不行..) 从形式上来说,在方法的名字前后个加上两条下划线的就是魔法方法了 .从功能上说,所有魔法 ...

  4. python,魔法方法指南

    1.简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加“魔法”的特殊方法. 它们经常是两个下划线包围来命名的 ...

  5. python中魔法方法__init__,__str__,__del__的详细使用方法

    1. python中的魔法方法, 类似__init__, __str__等等,这些内置好的特定的方法进行特定的操作时会自动被调用 2. __init__的使用方法 class 类名(object):  ...

  6. 21 python的魔法方法(转)

    魔法方法 含义   基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法2. 它的第一个参数是这个类,其他的参数是用来直接传递给 _ ...

  7. Python的魔法方法??

    就是可以给你的类增加魔力的特殊方法,如果你的对象实现 (重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的. __in ...

  8. python基础--魔法方法、迭代器、上下文管理

    isinstance:判断一个对象是否是某个类的实例 参数一:要判断的对象 参数二:要判断的类型 issubclass:判断一个类是否是另一个类的子类 参数一:是待判断的子类 参数二:待判断的父类 _ ...

  9. Python随笔--魔法方法(析构与构造)

    #析构方法的调用

  10. python中魔法方法(持续更新)

    1.对于一个自定义的类,如果实现了 __call__ 方法,那么该类的实例对象的行为就是一个函数,是一个可以被调用(callable)的对象.例如: class Add: def __init__(s ...

随机推荐

  1. 计数dp做题笔记

    YCJS 3924 饼干 Description 给定一个长度为\(n\)的序列,序列每个元素的取值为\([1,x]\),现在给定\(q\)个区间,求在所有取值方案中,区间最小值的最大值的期望是多少? ...

  2. oracle split函数

    PL/SQL 中没有split函数,需要自己写. 代码: ); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些. --创建function create or r ...

  3. Navicat连接虚拟机上的mysql

    刚刚在虚拟主机上安装mysql,  想使用Navicat 操作mysql.  但是连接不上 报错: 2003 - can't connect to MySQL server on '192.168.1 ...

  4. nodejs的npm命令无反应的解决方案

    这二天用npm下载模块的时候输入npm命令完全无反应,不是加载的那种状态而是下标不停地在哪里闪...之后找解决方案,说要删除npmrc文件.强调:不是nodejs安装目录npm模块下的那个npmrc文 ...

  5. Postgres copy命令导入导出数据

    最近有需要对数据进行迁移的需求,由于postgres性能的关系,单表3000W的数据量查询起来有一些慢,需要对大表进行切割,拆成若干个子表,涉及到原有数据要迁移到子表的需求.起初的想法是使用存储过程, ...

  6. 【零基础】搞懂GPU为什么比CPU“快”

    一.前言 近几年深度学习在各领域大显神威,而”GPU加速"也得到了越来越多的篇幅,似乎任何程序只要放到GPU上运行那速度就是杠杠的.GPU代替CPU计算已成了大势所趋?我先告诉你结论”那是不 ...

  7. 整合spring boot时操作数据库时报错Caused by: java.lang.InstantiationException: tk.mybatis.mapper.provider.base.B

    原文:https://blog.csdn.net/u__f_o/article/details/82756701 一般出现这种情况,应该是没有扫描到对应的mapper包,即在启动类下配置MapperS ...

  8. GDB之调试器用法

    GDB 完成的作用: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式 当程序被停住时,可以检查此时程序中所发生的事,并追索上文 动 ...

  9. 基于角色的权限控制系统(role-based access control)

    role-based access control(rbac),指对于不同角色的用户,拥有不同的权限 .用户对应一个角色,一个角色拥有若干权限,形成用户-角色-权限的关系,如下图所示.当一个用户进行访 ...

  10. 可插拔式后台管理系统(Django)

    1.实现效果 研究了下django admin的功能,自己实现了一个简单的可插拔式后台管理系统,方便自定义特殊的功能,而且作为一个独立单独的django app,可以整体拷贝到其他项目中作为后台数据管 ...