zoukankan      html  css  js  c++  java
  • 类里面的 @staticmethod,@classmethod,@property

    关于@staticmethod:

    返回函数的静态方法,该方法不强制要求传递参数

    文档里面的解释是:静态方法不会收到隐式的第一个参数

    @staticmethod 静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,是类的工具包

    该函数不传入 self 或者 cls

    class demo(object):
       @staticmethod
       def f():
           print "跑起来了"

    demo().f()       # 第一种方式调用
    demo.f() #第二种
    res = demo() #第三种
    res.f()

    方法加入了 @staticmethod 就不需要加上参数 self 了,上图如果去掉 @staticmethod 就会报错

    使用staticmethod的原因是如果您有一些可以作为独立函数编写的东西(不是任何类的一部分),但是您希望将其保留在类中,因为它在某种程度上与类相关。(例如,它可以是一个不需要来自类的任何信息的函数,但是它的行为是特定于类的,因此子类可能希望重写它。)在许多情况下,编写一些与独立函数而不是staticmethod一样有意义

     

    关于@classmethod

    classmethod修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的cls 参数,可以用来调用类的属性,类的方法,实例化对象等

    class demo(object):
       bar = 1
       def func1(self):
           print "这是function1"

       @classmethod
       def func2(cls):
           print "这是function2"
           print cls.bar
           cls().func1()


    # demo.func1()   # 报错,想调用 func1 必须实例化
    demo.func2()
    # 结果:
    # 这是function2
    # 1
    # 这是function1

     

    关于@property

    可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改

    class demo(object):
       def __init__(self, value):
           self.data1 = value

       @property
       def az(self):
           return self.data1

       @az.setter       # 设置
       def az(self, data):
           self.data1 = data

       @az.deleter      # 删除
       def az(self):      
           self.data1 = 0

    datas = demo(30)
    print datas.az    # 30

    datas.az = 123
    print datas.az    # 123

    del datas.az
    print datas.az    # 0

     

  • 相关阅读:
    Arduino学习笔记 (五) -- 红外接收与解码
    Arduino学习笔记 (四) -- 常用函数
    VSCode 基础必备插件
    Arduino学习笔记 (三) -- 语言基本概念
    Arduino学习笔记 (二) -- 常见板型
    Arduino学习笔记 (一) -- 概述
    一个好玩的东西:页面点击鼠标左键显示浮动文字
    Python多线程
    Nginx配置转发
    阿里云(CentOs)搭建SVN服务
  • 原文地址:https://www.cnblogs.com/yanruizhe/p/15126785.html
Copyright © 2011-2022 走看看