@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 的用法相关推荐

  1. property classmethod staticmethod的用法

    一:property的用法 1,@property 能够将一个方法伪装成一个属性,它并不会让你的代码有什么逻辑上的提高,只是从调用者的角度上换了一种方式,使之看起来更合理.调用方法从原来的的对象名.方 ...

  2. python面试题之下面这些是什么意思:@classmethod, @staticmethod, @property?

    回答背景知识 这些都是装饰器(decorator).装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类. @标记是语法糖(syntactic s ...

  3. 下面这些是什么意思:@classmethod, @staticmethod, @property?

    @classmethod, @staticmethod和@property这三个装饰器的使用对象是在类中定义的函数.下面的例子展示了它们的用法和行为: class MyClass(object):de ...

  4. IOS第三天(@property与@synthesize的用法)

    一.@property与@synthesize基本规范用法 1.@property 当编译器遇到@property时,会自动展开成getter和setter的声明 #import <Founda ...

  5. python装饰器 property_介绍Python的@property装饰器的用法

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...

  6. 介绍Python的@property装饰器的用法_python_脚本之家

    介绍Python的@property装饰器的用法_python_脚本之家 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Studen ...

  7. property、staticmethod、classmethod与__str__的用法

    import math class Circle:def __init__(self,radius): #圆的半径radiusself.radius=radius@propertydef area(s ...

  8. python中自带的三个装饰器_python三个自带装饰器的功能与使用(@property、@staticmethod、@classmethod)...

    本篇随笔只是记录我对这三个装饰器的理解,可能会有不准确的地方,敬请指出. property装饰器 功能:通过property装饰器控制类的属性的绑定与获取,一般就是给某个属性增加一个验证类型等功能. ...

  9. Python: classmethod staticmethod 区别

    classmethod:类方法 staticmethod:静态方法 在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表 ...

  10. python classmethod static_【python】classmethod staticmethod 区别

    其他参考: 比较好的讨论: classmethod:类方法 staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmeth ...

最新文章

  1. 我有点不喜欢分布式中的TCC模式了
  2. eclipse 安装svn插件
  3. webstock php,workerman_connection
  4. SQL Server-基础-经典SQL语句
  5. valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
  6. python停用词表_多版本中文停用词词表 + 多版本英文停用词词表 + python词表合并程序...
  7. 2020年Airbnb爱彼迎中国房东社区报告
  8. FCPX插件mTransition Shade for mac(71组阴影遮挡过渡视频转场)
  9. java t9 字母组合_太赞了!美团T9终于整理出Java架构之完美设计实战开源文档
  10. Cocos2d BMFont解析
  11. 问题 K: n个数的最大值和最小值
  12. kNN(k-nearest-neighbor)算法的Python实现
  13. Qt —— 海康SDK获取视频并OpenCv处理每帧图像进行显示
  14. openbmc开发30:webui开发—基础
  15. shell脚本获取当前时间、1分钟前时间、1小时前时间和1天前时间
  16. 刷题记录--1bit与2bit字符
  17. C语言(C++)打开有规律名称的多个文件,并写入数据
  18. 网络准入认证系统方案评估_七夕小子_新浪博客
  19. 我想转行程序员,上个编程培训班,能找到工作吗?我可以自学吗?
  20. 开课吧T31项目第8天

热门文章

  1. linux安装steam
  2. mysql关键字及其用法_mysql的优化-explain
  3. 64位电脑 装32位oracle,64位Windows可以安装32位的Oracle吗
  4. 二极管区分极性以及驱动原理
  5. Linux嵌入式开发_修改镜像文件输出路径
  6. html移动端缩放解决方案
  7. 带来一个react插件的使用方式---- video-react
  8. mysql配置utf8_mb4
  9. MYSQL主从复制操作文档
  10. iPhone/iPad/iPod touch编程时版本区分