转自:https://blog.youkuaiyun.com/lihao21/article/details/79762681
不多说,直接上代码示例讲解。
下面三个方法一次为:示例方法、类放大、静态方法。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
class Kls(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)
if __name__ == '__main__':
ik = Kls()
ik.foo(1)
print(ik.foo)
print('------------------------------------------------')
ik.class_foo(1)
Kls.class_foo(1)
print(ik.class_foo)
print('------------------------------------------------')
ik.static_foo(1)
Kls.static_foo(1)
print(ik.static_foo)
输出如下:
C:\Python36\python3.exe "C:/own/my_exercise/instance and static.py"
executing foo(<__main__.Kls object at 0x02D2DD50>,1)
<bound method Kls.foo of <__main__.Kls object at 0x02D2DD50>>
------------------------------------------------
executing class_foo(<class '__main__.Kls'>,1)
executing class_foo(<class '__main__.Kls'>,1)
<bound method Kls.class_foo of <class '__main__.Kls'>>
------------------------------------------------
executing static_foo(1)
executing static_foo(1)
<function Kls.static_foo at 0x02D1A588>
如上,三个方法区分如下:
实例方法:
- 通过类的实例进行调用
- 不可以通过类直接调用
- 最为常见
类方法:
- 既可以通过类也可以通过实例调用类方法
静态方法:
- 需要定义一些方法,这些方法跟类有关,但在实现时并不需要引用类或者实例,例如,设置环境变量,修改另一个类的变量等;静态方法很像我们在类外定义的函数。
- 可以使用类也可以使用示例调用静态方法