我们在进行面向对象学习时,会遇到各种方法,类方法、实例方法、静态方法。那这些到底是什么?怎么用?有啥区别?
Python类中的方法也可以具体可划分为类方法、实例方法和静态方法。
一般,我们在面向对象编程时,类中定义的都是实例方法。
下面这些代码定义的就是实例方法,一般需要传入self参数:
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print('Hello, my name is {}.'.format(self.name))
如果要使用以上的实例方法,首先需要实例化一个对象,然后调用方法:
person_a = Person('Li Ming')
person_a.greet()
输出如下:

Python类方法中需要至少包含一个参数,一般默认写为cls,类方法的例子如下(在原来实例方法的基础上加入类方法):
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print('Hello, my name is {}.'.format(self.name))
@classmethod
def info(cls):
print('调用了类方法')
大家应该发现了,类方法需要使用修饰语句:@classmethod
类方法主要有两种方式调用:
第一种,使用类名直接调用类方法:
输出:

第二种,使用类实例调用类方法(不推荐):
person_b = Person('Xiao Hong')
person_b.info()
输出:

从以上可以看出,不创建实例和创建实例,都可以调用类方法。
接下来看看静态方法,静态方法不需要self、cls这样的参数,可以理解为静态方法只是普通的函数,不会用到类属性等内容。类静态方法中无法调用任何类和对象的属性和方法,静态方法与类的关系不大,加入了静态方法代码如下:
class Person:
def __init__(self, name):
self.name = name
def greet(self):
print('Hello, my name is {}.'.format(self.name))
@classmethod
def info(cls):
print('调用了类方法')
@staticmethod
def calculate(a, b):
print('调用静态方法计算两数之和')
print('{}+{}={}'.format(a, b, a+b))
静态方法主要有两种方式调用:
第一种,使用类名直接调用静态方法:
输出:

第二种,使用类实例调用静态方法:
person_c = Person('Pang Hu')
person_c.calculate(1, 2)
输出:

一般来说,实例方法大家必须掌握,其次,建议在面向对象编程中区分一下实例方法和静态方法。当用不到类属性时可以写静态方法,而不是实例方法。当你的某个方法与其它的方法没有任何关系的时候,就可以定义为静态方法和类方法。
大家应该学会了吧~
重磅!Python交流群已成立
为了给小伙伴们提供一个互相交流的技术平台,特地开通了Python交流群。群里有不少技术大神,不时会分享一些技术要点,更有一些资源收藏爱好者不时分享一些优质的学习资料。(免费,不卖课!)

▲长按扫码