持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
1.1 类方法
类属性就是针对类对象定义的属性
- 使用赋值语句在class关键字下方可以定义类属性
- 类属性用于记录与这个类相关的特征 类方法就是针对类对象定义的方法
- 在类方法内部可以直接访问类属性或者调用其他的类方法 类方法语法:
@classmethod是在告诉Python解释器,下方的方法是一个类方法,而不是一个实例方法- 类方法中的第一个参数必须是
cls(使用其他名称也可以,不过习惯使用cls),由哪一个类调用的方法,方法内的cls就是哪一个类的引用。 - 通过
类名.调用类方法,调用方法时,不需要传递cls参数,Python的解释器会自动帮我们传入这个参数。 在方法内部: - 可以通过
cls.访问类的属性 - 也可以通过
cls.调用其他的类方法
@classmethod
def 类方法名(cls):
pass
2. 案例演练
案例需求:
- 定义一个工具类
- 每件工具都有自己的name
- 需求--在类封装一个show_tool_count的类方法,输出使用当前这个类,创建的对象个数 代码演示如下所示:
class Tool(object):
# 使用赋值语句定义类属性,记录所有工具对象的数量
count = 0
@classmethod
def show_tool_count(cls):
print("工具对象的数量 %d" % cls.count)
def __init__(self, name):
self.name = name
# 让类属性的值+1
Tool.count += 1
# 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
# 调用类方法
Tool.show_tool_count()
程序运行结果如下图所示:在类方法内部,可以直接使用cls访问类属性或者调用类方法
3. 静态方法
在开发时,如果需要在类中封装一个方法,这个方法:
- 既不需要访问实例属性或者调用实例方法
- 也不需要访问类属性或者调用类方法 这个时候,可以把这个方法封装成一个静态方法
- 静态方法需要用修饰器
@staticmethod来标识,告诉解释器这是一个静态方法 - 通过
类名.调用静态方法 静态方法语法如下:
@staticmethod
def 静态方法名():
pass
下面将定义一个狗类,在类中定义一个静态方法,并且完成静态方法调用。
class Dog(object):
@staticmethod
def run():
# 不访问实例属性/类属性
print("小狗要跑...")
# 通过类名.的方式调用静态方法--不需要创建对象
Dog.run()
运行结果如下图所示:因为是静态方法,括号内不需要传递self参数。在调用静态方法时,不需要创建对象就能调用静态方法。