1

一、知识点^_^

  • 函数:我一般习惯把跟类无关叫成函数,而类里面实现的叫方法。
  • 类方法:也叫类型方法,在该方法上一行,用@classmethod进行标记。
    第一个参数强制为cls,类对象。可以通过这个类对象访问类属性,由于没有传入类实例对象,所以不能访问类实例属性。
  • 静态方法:用@staticmethod标记的方法。无内定的参数,类和实例都可以调用,方法有多少参数就必须传递多少参数。
  • 实例方法:没有@classmethod@staticmethod标记的方法是实例方法。
    第一个参数强制为self,类实例对象。可以通过这个类实例对象访问类属性,可以通过类实例对象的__class__属性访问类属性。
    假设该方法有n个参数,类型调用的时候需要给n个参数传参。而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身。

二、举例说明

先来了解一下绑定的概念。

  • 绑定binding:它与方法调用相关联。
    首先该方法是类内部定义的函数,是类方法属性。
    类方法中,第一个参数都是self,表示调用此方法的实例对象,不需要赋值。
    且该方法只有在其所属类拥有实例对象时,才能被调用,即方法绑定到类实例对象上了。
    没有类实例对象时,方法就是未绑定状态。

上代码:

def foo(x):                # 一般方法
    print "executing foo(%s)"%(x)
    
class A(object):           
    def foo(self,x):    # 实例方法
        print "executing foo(%s,%s)"%(self,x)
        
    @classmethod        # 类方法          
    def class_foo(cls,x):
        print "executing class_foo(%s,%s)"%(cls,x)

    @staticmethod        # 静态方法
    def static_foo(x):
        print "executing static_foo(%s)"%x
a=A()

1、 一般方法
此方法的工作跟类、实例均无关系。可以直接调用foo(x)。
2、 实例方法
在类里定义实例方法时第一个参数永远是实例变量self(绑定类的实例),实例方法的调用离不开实例,调用:a.foo(x),其中a是A的实例。
3、 类方法 @classmethod
类方法定义时需要去绑定类(即通过cls)。调用的时候传递的是类,调用:A.class_foo(x),其中A是类。
4、 静态方法@staticmethod
与普通方法一样,不需要对类或实例进行绑定,but调用时需要通过类或实例,调用:a.static_foo(x)或A.static_foo(x)。


❤ thanks for watching, keep on updating...
点个赞再走吧


unpredictable_X
34 声望17 粉丝

热爱学习,热爱生活