property 、classmethod 、 staticmethod 的用法
@property
# property是一个装饰器函数 ,作用:将一个方法伪装成属性
# 所有的装饰器函数都怎么用? 在函数、方法、类的上面一行直接@装饰器的名字
# 装饰器的分类: # 装饰函数 # 装饰方法 : property # 装饰类
class Student:def __init__(self,name,age):self.__name = nameself.age = age@property # 将一个方法伪装成一个属性def name(self):return self.__name zhuge = Student('诸葛',20) print(zhuge.name)
计算一个圆的面积和周长
from math import pi class Circle:def __init__(self,r):self.r = r@propertydef area(self):return self.r**2*pi@propertydef perimeter(self):return 2*self.r *pi c1 = Circle(10) print(c1.area) print(c1.perimeter)
Goods的实例
class Goods:__discount = 0.8def __init__(self,price):self.__price = price@propertydef price(self):return self.__price*Goods.__discount@price.setterdef price(self,new):self.__price = new@price.deleterdef price(self):del self.__price # 真的删除,可以赋值 apple = Goods(10) print(apple.price)apple.price = 8 print(apple.price)
# 只有当被property装饰的方法# 又实现了一个同名方法# 且被setter装饰器装饰了# 且在对被装饰的方法赋值的时候 就可以出发被setter装饰器方法# 作用:用来保护一个变量,在修改的时候能够添加一些保护条件
# 一个方法被伪装成属性之后# 应该执行一个属性的增删改查的操作# 那么增删和修改,就对应着被setter装饰的方法,这个方法又一个必传的参数new,表示赋值的时候等号后的值# 删除一个属性 对应着 被deleter装饰的方法,这个方法并不能在执行的时候真的被删除,而是在代码中执行什么就有什么效果。
@classmethod 类方法
class Goods:__discount = 0.8def __init__(self,price):self.__price = price@propertydef price(self):return self.__price*Goods.__discount@classmethoddef chang_discount(cls,new): # 类方法cls.__discount = new apple = Goods(10) banana = Goods(20) Goods.chang_discount(0.7) # 改变了类中私有属性 # print(Goods.__dict__)print(apple.price) print(banana.price)
特点:只使用类中的资源,且这个资源可以直接用类名引用的使用,那这个方法应该被改为一个方法
# @staticmethod 将类外面的函数 拿到里面
class Student: # 静态方法@staticmethod # 可以把外面的函数拿到类里面写def login(usr,pwd): # 相当于将他变成普通方法,可以不用self传参。通过类名点方法名调用print('in login',usr,pwd) Student.login('user','pwd')
转载于:https://www.cnblogs.com/youhongliang/p/9562452.html
property 、classmethod 、 staticmethod 的用法相关推荐
- property classmethod staticmethod的用法
一:property的用法 1,@property 能够将一个方法伪装成一个属性,它并不会让你的代码有什么逻辑上的提高,只是从调用者的角度上换了一种方式,使之看起来更合理.调用方法从原来的的对象名.方 ...
- python面试题之下面这些是什么意思:@classmethod, @staticmethod, @property?
回答背景知识 这些都是装饰器(decorator).装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类. @标记是语法糖(syntactic s ...
- 下面这些是什么意思:@classmethod, @staticmethod, @property?
@classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数.下面的例子展示了它们的用法和行为: class MyClass(object):de ...
- IOS第三天(@property与@synthesize的用法)
一.@property与@synthesize基本规范用法 1.@property 当编译器遇到@property时,会自动展开成getter和setter的声明 #import <Founda ...
- python装饰器 property_介绍Python的@property装饰器的用法
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...
- 介绍Python的@property装饰器的用法_python_脚本之家
介绍Python的@property装饰器的用法_python_脚本之家 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Studen ...
- property、staticmethod、classmethod与__str__的用法
import math class Circle:def __init__(self,radius): #圆的半径radiusself.radius=radius@propertydef area(s ...
- python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...
本篇随笔只是记录我对这三个装饰器的理解,可能会有不准确的地方,敬请指出. property装饰器 功能:通过property装饰器控制类的属性的绑定与获取,一般就是给某个属性增加一个验证类型等功能. ...
- Python: classmethod staticmethod 区别
classmethod:类方法 staticmethod:静态方法 在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表 ...
- python classmethod static_【python】classmethod staticmethod 区别
其他参考: 比较好的讨论: classmethod:类方法 staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmeth ...
最新文章
- 我有点不喜欢分布式中的TCC模式了
- eclipse 安装svn插件
- webstock php,workerman_connection
- SQL Server-基础-经典SQL语句
- valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
- python停用词表_多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序...
- 2020年Airbnb爱彼迎中国房东社区报告
- FCPX插件mTransition Shade for mac(71组阴影遮挡过渡视频转场)
- java t9 字母组合_太赞了!美团T9终于整理出Java架构之完美设计实战开源文档
- Cocos2d BMFont解析
- 问题 K: n个数的最大值和最小值
- kNN(k-nearest-neighbor)算法的Python实现
- Qt —— 海康SDK获取视频并OpenCv处理每帧图像进行显示
- openbmc开发30:webui开发—基础
- shell脚本获取当前时间、1分钟前时间、1小时前时间和1天前时间
- 刷题记录--1bit与2bit字符
- C语言(C++)打开有规律名称的多个文件,并写入数据
- 网络准入认证系统方案评估_七夕小子_新浪博客
- 我想转行程序员,上个编程培训班,能找到工作吗?我可以自学吗?
- 开课吧T31项目第8天