• classmethod与staticmethod


    1.classmethod

     

     @classmethod   # 把一个对象绑定的方法 修改成一个 类方法
    第一,在方法中仍然可以引用类中的静态变量
    第二,可以不用实例化对象,就直接用类名在外部调用这个方法
    什么时候用@classmethod?
    1.定义了一个方法,默认传self,但这个self没被使用
    2.并且你在这个方法里用到了当前的类名,或者你准备使用这个类的内存空间中的名字的时候

    import time
    class Date:
        def __init__(self,year,month,day):
            self.year = year
            self.month = month
            self.day = day
        @classmethod
        def today(cls):
            struct_t = time.localtime()
            date = cls(struct_t.tm_year,struct_t.tm_mon,struct_t.tm_mday)
            return date
    
    date对象 = Date.today()
    print(date对象.year)
    print(date对象.month)
    print(date对象.day)
    

     2. @staticmethod 被装饰的方法会成为一个静态方法

    class User:
        pass
        @staticmethod
        def login(a,b):      # 本身是一个普通的函数,被挪到类的内部执行,那么直接给这个函数添加@staticmethod装饰器就可以了
            print('登录的逻辑',a,b)
            # 在函数的内部既不会用到self变量,也不会用到cls类
    
    obj = User()
    User.login(1,2)
    obj.login(3,4)
    
    class A:
        country = '中国'
        def func(self):
            print(self.__dict__)
        @classmethod
        def clas_func(cls):
            print(cls)
        @staticmethod
        def stat_func():
            print('普通函数')
        @property
        def name(self):
            return 'wahaha'
    

     小结:

      能定义到类中的内容

    • 静态变量 是个所有的对象共享的变量 有对象类调用 但是不能重新赋值
    • 绑定方法 是个自带self参数的函数 由对象调用
    • 类方法 是个自带cls参数的函数 由对象类调用
    • 静态方法 是个啥都不带的普通函数 由对象类调用
    • property属性 是个伪装成属性的方法 由对象调用 但不加括号

    @staticmethod 不需要访问和类相关的属性或数据

    @classmethod 可以访问和类相关(不和实例相关)的属性

    如果你定义了一个方法它的返回值永远和类的属性及实例无关,结果永远不变,就用@staticmethod

    如果你定义了一个方法它的返回值和只和类的属性有关,结果可变.就用@classmethod

  • 相关阅读:
    数独游戏技巧(转)
    Strange Way to Express Integers(中国剩余定理+不互质)
    C Looooops(poj2115+扩展欧几里德)
    X问题(中国剩余定理+不互质版应用)hdu1573
    合并果子(优先队列 +或者+哈夫曼)
    Shaping Regions(dfs)
    Modular Inverse(zoj3609+欧几里德)
    Contest2075
    Clock Pictures(kmp + Contest2075
    Opening Ceremony(贪心)
  • 原文地址:https://www.cnblogs.com/dylan123/p/12461927.html
Copyright © 2020-2023  润新知