zoukankan      html  css  js  c++  java
  • python静态属性@property、类方法@classmethod、静态方法@staticmethod和普通方法

    静态属性:即将类的函数通过@property属性封装,封装后实例调用该函数时,不再需要在函数后面加(),而是用类似调用数据属性的方式直接调用函数名称即可执行函数。

    静态属性既可以访问类的属性,也可以访问实例的属性。

    类方法:即在类的函数前加@classmethod属性,函数第一个参数为cls类,表示该函数是类的方法,而不需要绑定具体实例。

    在类方法里面可以调用类的属性,并且在类调用该函数时,会将自身作为第一个参数传入,类方法不能访问实例。实例可以调用类方法。

    静态方法,即在类的函数前加@staticmethod属性,函数参数既没有cls类,也没有self实例,表示该函数是类的工具包,与类本身和实例都没有绑定关系。

    静态方法由于没有类和实例参数,所以不能访问类和实例的属性。实例可以调用静态方法。

    普通方法:指既没有上述三种修饰符,也不是常规的函数的方法,可以定义,类可以调用但实例不能调用,这种方法其实是没有意义的,不建议使用。实例不能调用普通方法。

    class room:
        tag=1
        def __init__(self, name,length,width,height):
            self.name=name
            self.length=length
            self.width=width
            self.height=height
        @property  #通过类提供的property对求面积的函数进行封装
        def square(self):
            s=self.length*self.width
            print('%s的面积为%s'%(self.name,s))
        @classmethod
        def volumn(cls,length,width,height):  #第一个参数为cls,即类
            v=length*width*height
            print('访问类的属性%s'%cls.tag)  #类方法可以访问类的属性
            print('类%s的体积为%s'%(cls,v))
        @staticmethod
        def haha(x,y):  #静态方法既没有类cls参数,也没有实例self参数,因此不能访问类和实例的属性
            print('From staticmethod,%s and %s is haha'%(x,y))
        def hahahaha(x,y): #可以这样定义普通方法,但不建议这样使用,没有意义
            print('From common method,%s and %s is hahahaha' % (x, y))
    room1=room('room1',10,13,3)
    room1.square #直接调用求面积的函数方法就可以执行函数,而不需要加()
    room.volumn(10,13,3)  #类调用类方法时,将类自身作为第一个参数传入
    room.haha('Jane','Alan')
    room.hahahaha('Jane','Alan')
    
    # 执行结果:
    # room1的面积为130
    # 访问类的属性1
    # 类<class '__main__.room'>的体积为390
    # From staticmethod,Jane and Alan is haha
    # From common method,Jane and Alan is haha
  • 相关阅读:
    .NetCore Grpc 客服端 工厂模式配置授权
    DOCKER 拉取 dotnet 镜像太慢 docker pull mcr.microsoft.com too slow
    Introducing .NET 5
    VSCode 出现错误 System.IO.IOException: The configured user limit (128) on the number of inotify instances has been reached.
    Omnisharp VsCode Attaching to remote processes
    zookeeper3.5.5 centos7 完全分布式 搭建随记
    Hadoop2.7.7 centos7 完全分布式 配置与问题随记
    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
    SQL基础随记3 范式 键
    MySQL调优 优化需要考虑哪些方面
  • 原文地址:https://www.cnblogs.com/Forever77/p/10086643.html
Copyright © 2011-2022 走看看