在python的类语法中,可以出现三种方法,具体如下:
(1)实例方法
1)第一个参数必须是实例本身,一般使用【self】表示。
2)在实例方法中,可以通过【self】来操作实例属性,【类名】来操作类属性。
3)实例方法只能通过实例对象去调用,尽管也可以通过类名间接调用【类名.方法名(self, ...)】,但此时仍然需要传入self对象。
(2)类方法
1)使用【@classmethod】修饰函数,且第一个参数必须是类本身,一般使用【cls】表示。
2)在类方法中,可以使用【cls=类名】来操作类属性,但是不能操作实例属性(self对象中存储的变量)。
3)类方法可以通过实例对象或者类对象调用。
(3)静态方法
1)使用【@staticmethod】修饰函数,不需要使用任何参数表示。与普通函数一样,只是将该方法放到了类中实现而已。
2)使用方式与类方法一样,参考类方法中的 2)、3)。(注:静态方法只能通过【类名】去操作类属性;)
案例1:实例方法、类方法、静态方法使用
classFoo(object):"""类三种方法语法形式"""count= 0 #统计实例对象的数量
class_method_count = 0 #统计类方法的调用次数
#实例方法
def __init__(self, name):
self.name=name
Foo.count+= 1
#实例方法
definstance_method(self):print("是类{}的实例方法,只能被实例对象调用".format(Foo))print("产生了一个<{}>实例,共有<{}>个实例对象".format(self.name, Foo.count))#类方法
@classmethoddefclass_method(cls):print("是类{}的类方法,可以被实例对象、类对象调用".format(cls))
cls.__static_method_test()
cls.class_method_count+= 1
#静态方法
@staticmethoddefstatic_method():print("是类{}的静态方法,可以被实例对象、类对象调用".format(Foo))print("+++以下内容为类方法class_method()的运行结果:")
Foo.class_method()
@staticmethoddef __static_method_test():print("调用了静态方法 static_method_test()")print("--"*20 + "实例方法测试" + "--"*20)
obj1= Foo("dog")
obj1.instance_method()#<=> Foo.ins