zoukankan      html  css  js  c++  java
  • 类的静态属性、类方法、静态方法

              静态属性:

              在类的函数属性里面,加上一个property的装饰器,这个函数属性就是静态属性,调用方式和数据属性一样了,不用加括号

    class School:
        tag = 1
        def __init__(self,name,xiaozhang,lenth,widet):
            self.name = name
            self.xiaozhang = xiaozhang
            self.lenth = lenth
            self.widet = widet
    
        @property             #静态属性
        def test(self):
            return self.lenth*self.widet
    
    s1 = School('xx大学',123,313,214)
    print(s1.test)
    print(s1.tag)
    
    >>>66982
    >>>1

            从例子看出,调用静态属性,和调用类的数据属性方法一样,这样用户不会发现和数据属性有什么不同,所以静态属性一般用来返回类比较常用的属性,比如一个圆的类,用户输入了半径,就可以定义一个圆面积的静态属性,也可以定义一个周长的静态属性,虽然我们是通过函数的方法实现,但用户调用的时候比较方便。

          类的函数属性可以分成分成两大类:

    一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

        1. 绑定到类的方法:用classmethod装饰器装饰的方法。

                    为类量身定制

                    类.boud_method(),自动将类当作第一个参数传入

                  (其实对象也可调用,但仍将类当作第一个参数传入)

        2. 绑定到对象的方法:没有被任何装饰器装饰的方法(就是正常的函数属性)

                   为对象量身定制

                   对象.boud_method(),自动将对象当作第一个参数传入

                 (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

           所以,绑定到类的方法,就是类方法,在类的函数属性里面,加上一个classmethod的装饰器,这个函数属性就是类方法,调用方式和函数属性一样,但是要把括号里的self改成cls

    class School:
        tag = 1
        def __init__(self,name,xiaozhang,lenth,widet):
            self.name = name
            self.xiaozhang = xiaozhang
            self.lenth = lenth
            self.widet = widet
    
        @property             #静态属性
        def test(self):
            return self.lenth*self.widet
    
        @classmethod         #类方法
        def tell_info(cls):
            print(cls.tag)
    
    
    #分别用类和实例调用
    School.tell_info()
    
    s1 = School('xx大学',123,313,214)
    s1.tell_info()     #实例也可以调用,但是默认传的第一个参数仍然是类
    
    >>>1
    >>>1

    二:非绑定方法:用staticmethod装饰器装饰的方法

            1. 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

        注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

              所以静态方法,就是在类内部用staticmethod装饰的函数,是普通函数。statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果,staticmethod只是名义上归属类管理,不能使用类变量和实例变量,是类的工具包

    class School:
        tag = 1
        def __init__(self,name,xiaozhang,lenth,widet):
            self.name = name
            self.xiaozhang = xiaozhang
            self.lenth = lenth
            self.widet = widet
    
        @property             #静态属性
        def test(self):
            return self.lenth*self.widet
    
        @classmethod         #类方法
        def tell_info(cls):
            print(cls.tag)
    
        @staticmethod        #静态方法
        def test1(x,y):
            print(x*y)
    
    #分别用类和实例调用
    School.test1(3,4)
    print(School.test1)
    
    s1 = School('xx大学',123,313,214)
    s1.test1(2,3)
    print(s1.test1)
    
    >>>12
    >>><function School.test1 at 0x000002859750BAE8>   #就是普通函数
    >>>6
    >>><function School.test1 at 0x000002859750BAE8>   #就是普通函数

              后续会讲到__str__和__repr__,再演示一个类方法和静态方法的实例,先保存这篇。

  • 相关阅读:
    tomcat 登录主页成功 点击Manager App 401 等问题
    servlet
    jsp 记录1 bs/cs
    java jar
    Java 第四课 对象 类
    java 第五课 异常
    Java 第三课 数组排序
    java 第二课 标识符
    java 第一课 笔记
    maven 项目问题集锦
  • 原文地址:https://www.cnblogs.com/pengfy/p/10648942.html
Copyright © 2011-2022 走看看