day28 property 装饰器
方法属性装饰器
本质上来说就是将方法的执行括号去掉,这样将一个方法掩饰成了一个变量名字,变成了类似属性的东西
内置装饰器函数,只在面向对象中使用
from math import pi
class Cricle:
def __init__(self,r):
self.r = r
@property
def perimeter(self):
return 2*pi*self.r
@property
def area(self):
return pi*self.r**2 c1 = Cricle(5) print(c1.perimeter) # 伪装成一个变量,变成一个属性
# print(c1.perimeter()) # 之前的实现方式
print(c1.area)
# print(c1.area())
既然是属性能不能改呢~
很明显是不能的
class Person:
def __init__(self,name,high,weight):
self.name = name
self.high = high
self.weight = weight
@property
def bmi(self):
return self.weight / self.high ** 2
suyang = Person("苏阳",1.5,180)
# print(suyang.bmi()) # 原先的调用方式
print(suyang.bmi) # 80.0
suyang.name = "sb"
# suyang.bmi = 18 # 既然是属性,改改试试?.
# AttributeError: can't set attribute # 毕竟特么不是属性,本质上是方法啊
property 的实际用例
商品打折
不让用户知道真实的价格只能看到打折后的价格
class Goods:
discount = 0.5 # 打折力度 5折
def __init__(self,name,price):
self.name = name
self.__price = price # 我才不会让别人知道我的价格
@property
def price(self):
return self.__price * Goods.discount apple = Goods("苏阳",0.5)
print(apple.price)
补充:
修改属性 @ name.setter,将原有的属性进行更改替换
class Person:
def __init__(self,name):
self.__name = name
@property
def name(self):
return self.__name +"sb"
@name.setter # 一般很难用到,计算出来的值一般是直接用不需要再处理了
def name(self,new_name):
self.__name = new_name
suyang = Person("苏阳")
print(suyang.name) # 苏阳sb
suyang.name = "suyang"
print(suyang.name) # suyangsb
day28 property 装饰器的更多相关文章
- Python的property装饰器的基本用法
Python的@property装饰器用来把一个类的方法变成类的属性调用,然后@property本身又创建了另一个装饰器,用一个方法给属性赋值.下面是在类中使用了@property后,设置类的读写属性 ...
- 面向对象之组合、封装、多态、property装饰器
概要: 组合 封装 property装饰器 多态 Python推崇鸭子类型:解耦合,统一标准(不用继承) 1. 组合 继承:会传递给子类强制属性 组合:解耦合,减少占用内存.如:正常继承,如果一个班级 ...
- import导入模块,==和is,浅拷贝和深拷贝,进制转换,位运算,私有化,property装饰器
'''import导入模块'''import sysprint(sys.path) sys.path.append('D://ASoft/Python/PycharmProjects')import ...
- property装饰器
# 需要了解的property的用法 class People: def __init__(self,name): self.__name=name @property def name(self): ...
- 组合,多态与多态性,封装以及property装饰器介绍
一:组合: 什么是组合:组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象. 为何要用组合:通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合 ...
- Python10/24--组合/封装/property装饰器/多态
组合的应用: 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. 如何用组合 '''class Foo: aaa=111 ...
- 手动实现property装饰器
首先,property装饰器是通过数据描述符实现的.用法很简单,大家应该都知道,这里就不细说了. 这里主要分析一下property是如何通过描述符实现的. class Property: def __ ...
- PYTHON-组合 封装 多态 property装饰器
# 组合'''软件重用的重要方式除了继承之外还有另外一种方式,即:组合组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之 ...
- [转载]Python使用@property装饰器--getter和setter方法变成属性
原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...
随机推荐
- [02] mybatis-config.xml 全局配置文件解析
本篇会摘录mybatis全局配置文件中比较常见常用的一些配置进行说明,其实官方文档已经写得足够清晰了(关键是还有中文版完全不慌),此处记录重要还是作为个人的巩固记录. 1.properties 在全局 ...
- 5个python爬虫教材,让小白也有爬虫可写,含视频教程!
认识爬虫 网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据. python写爬虫的优势 其实以上功能很多语言和工具都能做,但是用python爬 ...
- Django学习篇(第二部)
4.Django pip3 install django C:\Python35\Scripts # 创建Django工程 django-admin startproject [工程名称] mysit ...
- Luogu P3177 [HAOI2015]树上染色
一道有机结合了计数和贪心这一DP两大考点的神仙题,不得不说做法是很玄妙. 首先我们很容易想到DP,设\(f_{i,j}\)表示在以\(i\)为根节点的子树中选\(j\)个黑色节点的最大收益值. 然后我 ...
- PHP实现验证码制作
captcha.php(PHP产生验证码并储存Session): <?php //开启Session session_start(); //绘制底图 $image = imagecreatetr ...
- 常见 Bash 内置变量介绍
目录 $0$1, $2 等等$#$* 与 "$*"$@ 与 "$@"$!$_$$$PPID$?$BASH$BASH_VERSION$EUID 与 $UID$GR ...
- mysql操作命令梳理(2)-alter(update、insert)
在mysql运维操作中会经常使用到alter这个修改表的命令,alter tables允许修改一个现有表的结构,比如增加或删除列.创造或消去索引.改变现有列的类型.或重新命名列或表本身,也能改变表的注 ...
- 网络流第一题!!!BZOJ1001
歇逼了一晚上,懵懵懂懂的懂了Dinic算法 大概是一遍BFS+DFS,还不是很懂,明天继续看!!! #include<iostream> #include<stdio.h> # ...
- HanderBar
对于java开发,涉及到页面展示时,比较主流的有两种解决方案: 1. struts2+vo+el表达式. 这种方式,重点不在于struts2,而是vo和el表达式,其基本思想是:根据页面需要的信息,构 ...
- 第一个Sprint第一天
第一个Sprint冲刺的第一天 组员:陈建定 陈友沛 林清松 我们小组选的题目是小学四则运算APP 之前我们都没有做过这个程序,不过我们会尽力完成. 第一阶段的冲刺我们主要分析这个APP的所需的功能, ...