实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)
1. 实例方法针对的是实例,第一个参数是self,普通对象方法至少需要一个self参数,代表类对象实例;
2. 类方法针对的是类,@classmethod 它表示接下来的是一个类方法,类方法的第一个参数cls,它们都可以继承和重新定义;
3. 静态方法用于作为程序中的共享资源,直接通过类去调用,不用实例化对象,不需要self参数,可以认为是全局函数,@staticmethod 它表示接下来的是一个静态方法
示例:
class Test1(object):
#定义实例方法
def test1(self):
print "object"
#定义类方法
@classmethod
def test2(cls):
print"class"
#定义静态方法
@staticmethod
def test3():
print "static"
#子类覆盖父类的类方法
class Test2(Test1):
@classmethod
def test2(cls):
print cls
print "test2 object"
#实例方法调用-1
f1=Test1()#创建实例对象f1
f1.test1()#调用实例方法
#实例方法调用-2
Test1.test1(f1)#另一种调用实例的方法
print "-------------"
#类方法通过实例调用-1
f1.test2()
#类方法通过类调用-2(不需传递实例的引用)
Test1.test2()
print "-------------"
#静态方法使用实例调用-1
f1.test3()
#静态方法静态方式调用-2
Test1.test3()
print "-------------"
Test2.test2() #如果子类覆盖了父类的类方法,最终调用的是子类的类方法,并传递子类的类对象
运行结果如下:
image.png注意:
1.Python中严格区分大小写。
2.如果子类覆盖了父类的类方法,最终调用的是子类的类方法,并传递子类的类对象。
网友评论