• 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
  • 相关阅读:
    11
    消除左递归
    4.K均值算法--应用
    3.K均值算法
    2.机器学习相关数学基础作业
    机器算法学习第一次作业
    第十五次作业
    第十四次作业
    第十三次作业
    第十二次作业
  • 原文地址:https://www.cnblogs.com/Forever77/p/10086643.html
Copyright © 2020-2023  润新知