一、知识点^_^
- 函数:我一般习惯把跟类无关叫成函数,而类里面实现的叫方法。
-
类方法:也叫类型方法,在该方法上一行,用
@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...
点个赞再走吧
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。