名称 | 定义 | 调用 | 关键字 | 使用场景 |
---|---|---|---|---|
实例方法 | 至少需要一个self参数 | 先实例化类,实例.方法名() | 无 | 方法内部涉及到实例对象属性的操作 |
类方法 | 至少需要一个cls参数 | 类名.方法名() 或者 实例.方法名() | @classmethod | 需要对类属性,即静态变量进行限制性操作 |
静态方法 | 无默认参数 | 类名.方法名() 或者 实例.方法名() | @staticmethod | 与实例对象无关,但与当前类有关;实际使用方法和函数一样 |
在类方法内不能调用实例方法 和实例变量,可以调用其他类方法和 类变量
# 定义函数
class MethodTest:
# 类属性
aa = ''
# 实例方法 可以调用类属性
def demo_method(self):
self.aa = '实例方法'
print(f"这个是一个{self.aa}")
# 类方法
@classmethod
def class_method(cls):
cls.aa = '类方法'
print(f"这个是一个{cls.aa}")
# cls.demo_method() # 类方法内不能调用实例方法 和 实例变量
# cls.static_method() # 类方法内可以调用其他类方法 和 类变量
# 静态方法 与实例对象无关
@staticmethod
def static_method():
bb = '静态方法'
print(f"这个是一个{bb}")
# 方法的调用
# 实例方法需要先实例化类,实例.方法名
p = MethodTest()
p.demo_method() # 这个是一个实例方法
# 类方法和静态方法可以直接调用,类名.方法名()
MethodTest.class_method() # 这个是一个类方法
MethodTest.static_method() # 这个是一个静态方法