python内置了property、staticmethod、classmethod三个装饰器,有时候我们也会用到,这里简单说明下

1、property

作用:顾名思义把函数装饰成属性

一般我们调用类方法成员,都是如下写法:

class propertyTest():
def __init__(self,x,y):
self.x = x
self.y = y def square(self):
return self.x * self.y pt = propertyTest(3,5)
print(pt.square())

这里一看square就是类的一个方法,但如果把他写成如下形式,那么就不确定调用的一定是类方法:

class propertyTest():
def __init__(self,x,y):
self.x = x
self.y = y @property
def square(self):
return self.x * self.y pt = propertyTest(3,5)
print(pt.square)

这里调用方法类似调用了一个成员变量一样,如果写成print(pt.square())编译器会报错

这就是property的用法, 把一个方法变成一个变量来调用

2、staticmethod

作用:不需要实例化,直接可以调用类中的方法,如下所示

class A():
def __init__(self):
pass @staticmethod
def plus(x,y):
print(x*y) c = A()
c.plus(2,3)
A.plus(4,5)

我们可以实例化类A,然后调用方法plus,也可以直接类.方法调用

3、classmethod

作用:和staticmethod类似,不同的是把调用的类作为第一个参数传入,如下:

class A():
def __init__(self):
pass @classmethod
def plus(cls,x,y):
print(cls)
print(x*y) A.plus(4,5)
c = A()
c.plus(5,6)

这里print(cls)打印的是类A,其他用法同staticmethod

python之内置装饰器(property/staticmethod/classmethod)的更多相关文章

  1. Python之内置装饰器property

    # -*- coding: utf-8 -*- # author:baoshan class Student(object): def __init__(self, name): self.name ...

  2. Python内置装饰器@property

    在<Python装饰器(Decorators )>一文中介绍了python装饰器的概念,日常写代码时有一个装饰器很常见,他就是内置的@property. 我们一步步的来接近这个概念. 一个 ...

  3. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  4. python基础语法16 面向对象3 组合,封装,访问限制机制,内置装饰器property

    组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ...

  5. python内置装饰器

    前言 接着上一篇笔记,我们来看看内置装饰器property.staticmethod.classmethod 一.property装饰器 1. 普通方式修改属性值 code class Celsius ...

  6. python基础之内置装饰器

    装饰器 简介 功能与格式 内置装饰器 @classmethod @propertry @staticmethod 其它 ---------------------------------------- ...

  7. Python 内置装饰器

    内置的装饰器 ​ 内置的装饰器和普通的装饰器原理是一样的,只不过返回的不是函数,而是类对象,所以更难理解一些. @property ​ 在了解这个装饰器前,你需要知道在不使用装饰器怎么写一个属性. d ...

  8. 面向对象之classmethod和staticmethod(python内置装饰器)

    对象的绑定方法复习classmethodstaticmethod TOC 对象的绑定方法复习 由对象来调用 会将对象当做第一个参数传入 若对象的绑定方法中还有其他参数,会一并传入 classmetho ...

  9. 三个面向对象相关的装饰器@property@staticmathod@classmethod

    @property 先看实例: from math import pi class Circle: def __init__(self,r): self.r = r @property def per ...

随机推荐

  1. 中间件RabbitMQ之运维篇

    一.RabbtMQ简介        RabbitMQ的官方站: http:/://www.rabbitmq.com/        rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业 ...

  2. PHP并发之Swoole

    <?php /** * Created by PhpStorm. * User: zhezhao * Date: 2016/10/20 * Time: 10:51 */ $url_arr = a ...

  3. Django中操作Redis

    一 创建redis连接池 redis_pool.py pool = redis.ConnectionPool(host='10.211.55.4', port=6379) 二 引入连接池 import ...

  4. Robotics Tools

    https://sites.google.com/site/sunglok/rv_tool/robot Robotics Tools Contents 1 Robotics Tutorials 2 R ...

  5. org.apache.hadoop.security.AccessControlException

    在hdfs集群上,需要向Hdfs写入文件,控制台会输出以下错误信息: Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoo ...

  6. activeMq-1 快速入门

    Activemq 是一款开源的消息中间件,适合中小型应用使用,遵循JMS规范. 具体介绍这里就不再阐述了,这里简单说下消息中间件的好处 1请求结果异步处理 客户端发送请求以后,服务器可以把相关数据放到 ...

  7. IIS7部署网站遇到的问题

    1.web.config文件中更改配置项时:  因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改.  运行命令行 %windir%\system32\ ...

  8. JavaScript:再谈Tasks和Microtasks

    JavaScript是单线程,也就是说JS的堆栈中只允许有一类任务在执行,不可以同时执行多类任务.在读js文件时,所有的同步任务是一条task,当然了,每一条task都是一个队列,按顺序执行.而如果在 ...

  9. Bootstrap方法为页面添加一个弹出框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. Docker构建文件

    构建文件 创建Dockerfile touch Dockerfile 编辑Dockerfile vim Dockerfile #基于java8版本构建 FROM java:8 #挂载日志目录 VOLU ...