zoukankan      html  css  js  c++  java
  • @classmethod和@staticmethod的区别

    1. @classmethod
    • class method是和类绑定的方法,不是和类的对象(实例)绑定的方法
    • class method能够访问类的状态,因为它可以接受一个指向类的参数(cls),而不是指向类实例的参数(self)。
    • class method可以修改类的状态,并应用到所有的类实例上。
    class C(object):
        @classmethod
        def fun(cls, arg1, arg2, ...):
           ....
    fun: function that needs to be converted into a class method
    returns: a class method for function.
    
    1. @staticmethod
    • class method也是和类绑定的方法,不是和类的对象(实例)绑定
    • class method不能访问类的状态
    • class method存在于类中是因为它是一个相关的函数
    class C(object):
        @staticmethod
        def fun(arg1, arg2, ...):
            ...
    returns: a static method for function fun.
    
    1. 例子
    class A(object):
        value = 42
        
        def m1(self):
            print(self.value)
    
        @classmethod
        def m2(cls):
            print(cls.value)
            cls.value += 10
    
        @staticmethod
        def m3(cls_instance):
            cls_instance.value -= 10
    
    a = A() # 
    a.m1 # <bound method A.m1 of <__main__.A object at 0x7fc8400b7da0>>
    a.m1() # 42
    # m1()是类A中的普通方法,必须在实例化的对象上进行调用。如果使用直接A.m1()就会得到m1() missing 1 required positional argument: 'self'的错误信息。
    
    https://blog.csdn.net/weixin_38243861/article/details/89402656
    
    
  • 相关阅读:
    11个Javascript树形菜单
    7款Flash和Javascript网页视频播放器
    10款Flash和Javascript网页音乐播放器
    第六章 jQuery操作表单
    第五章 jQuery中的动画
    第四章 jQuery中的事件
    第三章 jQuery中的DOM操作
    第二章 jQuery选择器
    第一章 认识jQuery
    DataGridView窗体之间的传递
  • 原文地址:https://www.cnblogs.com/amize/p/14747331.html
Copyright © 2011-2022 走看看