python3.6中@property装饰器的使用方法示例
本文实例讲述了python3.6中@property装饰器的使用方法。分享给大家供大家参考,具体如下:
1、@property装饰器的使用场景简单记录如下:
- 负责把一个方法变成属性调用;
- 可以把一个getter方法变成属性,
@property
本身又创建了另一个装饰器@score.setter
,负责把一个setter方法变成属性赋值; - 只定义getter方法,不定义setter方法就是一个只读属性
2、通过一个例子来加深对@property装饰器的理解:利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution。
代码实现如下:
class Screen(object): @property def width(self): return self._width @width.setter def width(self,value): self._width = value @property def height(self): return self._height @height.setter def height(self,values): self._height = values @property def resolution(self): return self._width * self._height s = Screen() s.width = 1024 s.height = 768 print('resolution = ',s.resolution)
运行结果:
resolution = 786432
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
相关推荐
-
Python3.7 新特性之dataclass装饰器
Python 3.7中一个令人兴奋的新特性是 data classes . 数据类通常是一个主要包含数据的类,尽管实际上没有任何限制. 它是使用新的 @dataclass 装饰器创建的,如下所示: from dataclasses import dataclass @dataclass class DataClassCard: rank: str suit: str 此代码以及本教程中的所有其他示例仅适用于 Python 3.7 及更高版本. 注意: 当然在 Python 3.6 版本也可以使用
-
python类装饰器用法实例
本文实例讲述了python类装饰器用法.分享给大家供大家参考.具体如下: #!coding=utf-8 registry = {} def register(cls): registry[cls.__clsid__] = cls return cls @register class Foo(object): __clsid__ = '123-456' def bar(self): pass print registry 运行结果如下: {'123-456': <class '__main__.F
-
实例讲解Python编程中@property装饰器的用法
取值和赋值 class Actress(): def __init__(self): self.name = 'TianXin' self.age = 5 类Actress中有两个成员变量name和age.在外部对类的成员变量的操作,主要包括取值和赋值.简单的取值操作是x=object.var,简单的赋值操作是object.var=value. >>> actress = Actress() >>> actress.name #取值操作 'TianXin' >&g
-
介绍Python的@property装饰器的用法
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数: class Student(object): def get_score(self): return self._score def set_s
-
浅谈解除装饰器作用(python3新增)
一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数. 假设装饰器是通过 @wraps 来实现的,那么你可以通过访问 wrapped 属性来访问原始函数: >>> @somedecorator >>> def add(x, y): ... return x + y ... >>> orig_add = add.__wrapped__ >>> orig_add(3, 4) 7 >>> 如果有多个包
-
Python3.5装饰器原理及应用实例详解
本文实例讲述了Python3.5装饰器原理及应用.分享给大家供大家参考,具体如下: 1.装饰器: (1)本质:装饰器的本质是函数,其基本语法都是用关键字def去定义的. (2)功能:装饰其他函数,即:为其他函数添加附加功能. (3)原则:不能修改被装饰的函数的源代码,不能修改被装饰的函数的调用方式.即:装饰器对待被修饰的函数是完全透明的. (4)简单应用:统计函数运行时间的装饰器 import time #统计函数运行时间的砖装饰器 def timmer(func): def warpper(*
-
Python黑魔法@property装饰器的使用技巧解析
@property有什么用呢?表面看来,就是将一个方法用属性的方式来访问. 上代码,代码最清晰了. class Circle(object): def __init__(self, radius): self.radius = radius @property def area(self): return 3.14 * self.radius ** 2 c = Circle(4) print c.radius print c.area 可以看到,area虽然是定义成一个方法的形式,但是加上@pr
-
Python3.5装饰器典型案例分析
本文实例讲述了Python3.5装饰器.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #高阶函数+嵌套函数==>装饰器 import time def timer(func): #timer(test1)-->func=test1 def decor(): start_time = time.time() func() #run test1 stop_time = tim
-
python3 property装饰器实现原理与用法示例
本文实例讲述了python3 property装饰器实现原理与用法.分享给大家供大家参考,具体如下: 学习python的同学,慢慢的都会接触到装饰器,装饰器在python里是功能强大的语法.装饰器配合python的魔法方法,能实现很多意想不到的功能.废话不多说,如果你已经掌握了闭包的原理,代码的逻辑还是可以看明白的,咱们直接进入正题. property的意义 @property把一个类的getter方法变成属性,如果还有setter方法,就在setter方法前面加上@method.setter.
-
Python 使用类写装饰器的小技巧
最近学到了一个有趣的装饰器写法,就记录一下. 装饰器是一个返回函数的函数.写一个装饰器,除了最常见的在函数中定义函数以外,Python还允许使用类来定义一个装饰器. 1.用类写装饰器 下面用常见的写法实现了一个缓存装饰器. def cache(func): data = {} def wrapper(*args, **kwargs): key = f'{func.__name__}-{str(args)}-{str(kwargs)})' if key in data: result = data
-
Python类装饰器实现方法详解
本文实例讲述了Python类装饰器.分享给大家供大家参考,具体如下: 编写类装饰器 类装饰器类似于函数装饰器的概念,但它应用于类,它们可以用于管理类自身,或者用来拦截实例创建调用以管理实例. 单体类 由于类装饰器可以拦截实例创建调用,所以它们可以用来管理一个类的所有实例,或者扩展这些实例的接口. 下面的类装饰器实现了传统的单体编码模式,即最多只有一个类的一个实例存在. instances = {} # 全局变量,管理实例 def getInstance(aClass, *args): if aC
随机推荐
- Perl中chomp和chop的区别介绍
- 用JSP编写文件上传
- Java读取Properties文件的七种方法的总结
- Lua中获取table长度的方法
- SQL Server误区30日谈 第6天 有关NULL位图的三个误区
- 网上搜索超级技巧集合第1/2页
- MySQL与MSSQl使用While语句循环生成测试数据的代码
- iOS中滑动控制屏幕亮度和系统音量(附加AVAudioPlayer基本用法和Masonry简单使用)
- javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
- 微信支付扫码支付php版
- 基于jQuery实现收缩展开功能
- VBScript的入门学习资料
- Sql Server里删除数据表中重复记录的例子
- MySql中的IFNULL、NULLIF和ISNULL用法详解
- jQuery中DOM节点的删除方法总结(超全面)
- dvbbs7.1 照样从后台得到webshell
- 浅谈内联函数与宏定义的区别详解
- c语言中 基于随机函数的使用详解
- C#中is和as用法实例分析
- ubuntu 16.04系统完美解决pip不能升级的问题