一、类方法
1、类方法的定义
- 使用
@classmethod
进行修饰 - 方法中第一个形参是cls
class People:
@classmethod
def func_name(cls, params):
pass
2、类方法的调用
- “类名.方法名”
- “对象.方法名”
class Student:
# 定义类属性
n = 20
def __init__(self, name):
# 定义实例属性
self.name = name
@classmethod
def s_info(cls):
print(cls.n) # 类方法可以访问类属性
print("call Student classmate")
# print(self.name) # 类方法不能访问实例属性
Student.s_info() # 使用“类名.方法名”的方法来调用
stu = Student("张三")
stu.s_info() # 使用“对象.方法名” 的方法来调用
二、实例方法
1、实例方法的定义
2、实例方法的调用
- 第一种是通过 “对象.方法名” 的方法来调用
- 第二种是通过 “类名.方法名(对象, 参数列表)” 的形式来调用
class Student:
# 定义类属性
n = 20
def __init__(self, name):
# 定义实例属性
self.name = name
def s_info(self):
print(self.n) # 实例方法访问类属性
print(self.name) # 实例方法访问实例属性
print("call Student instancemethod")
stu = Student("张三")
stu.s_info() # 通过 “对象.方法名” 的方法来调用
Student.s_info(stu) # 类名.方法名(对象, 参数列表)” 的形式来调用
三、类方法和实例方法区别
- 类方法第一个形参是cls,实例方法第一个形参是self
- 类方法调用不需要创建对象,实例方法调用必须要创建对象
- 类方法可以访问类中的类属性但不可以访问实例属性,访问类属性也是使用 “cls.” 的形式
- 实例方法可以访问类中的类属性和实例属性,使用 “self.” 的形式
四、静态方法
1、静态方法的定义
class Student:
@staticmethod
def func_name(params):
pass
2、静态方法的调用
- “类名.方法名”
- “对象.方法名”
class Student:
@staticmethod
def s_info():
print("call Student staticmethod")
Student.s_info() # “类名.方法名” 的方法来调用
stu = Student()
stu.s_info() # “对象.方法名” 的方法来调用
3、静态方法的使用场景
静态方法不能访问类属性与实例属性,所以静态方法使用场景如下:
- 既不需要访问实例属性或者实例方法
- 也不需要访问类属性或类方法