实例方法
在类中定义的方法,一般都是实例方法,第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法),只能由实例对象调用。
类方法
定义前需要使用@classmethod装饰器进行装饰。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法),调用此方法时,会同时创建一个实例,注意:此方法调用时,类的构造函数必须要有默认值,类对象或实例对象都可以调用。
静态方法
定义前需要使用@staticmethod装饰器进行装饰。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法,调用此方法时,不需要进行实例化,类对象或实例对象都可以调用。
实例:
# coding=utf-8
class Chinese(object):
nationality = '中国'
def __init__(self, name='Super于', age=25):
self.name = name
self.age = age
# 实例方法
def print_info(self):
print('国籍:', Chinese.nationality)
print('姓名:', self.name)
print('年龄:', self.age)
# 类方法
@classmethod
def get_nationality(cls):
print('类方法生成了实例对象:', cls)
# print('姓名:', self.name) # 会报错 name 'self' is not defined
return cls.nationality
# 静态方法
@staticmethod
def print_interest(interest):
print('我的爱好是', interest)
if __name__ == "__main__":
# 调用实例方法,首先对类进行实例化
superyujx = Chinese()
superyujx.print_info()
# 调用类方法,同时会创建一个实例
print(Chinese.get_nationality())
# 调用静态方法
Chinese.print_interest('编程')
结果:
国籍:中国
姓名:Super于
年龄:25
类方法生成了实例对象:<class '__main__.Chinese'>
中国
我的爱好是 编程
我是「Super于」,立志做一个每天都有正反馈的人!