Python-面向对象编程-类方法

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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访问类属性或者调用类方法

image.png

3. 静态方法

在开发时,如果需要在类中封装一个方法,这个方法:

  • 既不需要访问实例属性或者调用实例方法
  • 也不需要访问类属性或者调用类方法 这个时候,可以把这个方法封装成一个静态方法
  • 静态方法需要用修饰器@staticmethod来标识,告诉解释器这是一个静态方法
  • 通过类名.调用静态方法 静态方法语法如下:
@staticmethod
def 静态方法名():
    pass

下面将定义一个狗类,在类中定义一个静态方法,并且完成静态方法调用。

class Dog(object):
    @staticmethod
    def run():
        # 不访问实例属性/类属性
        print("小狗要跑...")


# 通过类名.的方式调用静态方法--不需要创建对象
Dog.run()

运行结果如下图所示:因为是静态方法,括号内不需要传递self参数。在调用静态方法时,不需要创建对象就能调用静态方法。

image.png