Python:类属性、类方法和静态方法

类属性

类属性就是给类对象中定义的属性,通常用来记录与这个类相关的特征,类属性不会用于记录具体对象的特征。

示例

需求:

  1. 定义一个Animal类;
  2. 每个物种都有自己的名字;
  3. 查看通过这个类创建了多少个物种

代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Animal(object):

    # 类属性
    count = 0

    def __init__(self, species):
        self.species = species

        Animal.count += 1


# 创建实例对象
dog = Animal("狗")
cat = Animal("猫")
pig = Animal("猪")

print(f"一共创建了 {pig.count} 个物种")
print(f"一共创建了 {Animal.count} 个物种")

pig.count = 10

print(f"一共创建了 {pig.count} 个物种")
print(f"一共创建了 {Animal.count} 个物种")

输出:

一共创建了 3 个物种
一共创建了 3 个物种
一共创建了 10 个物种
一共创建了 3 个物种

访问类属性的方式:

  1. 类名.类属性
  2. 对象.类属性(不推荐,这会造成在代码阅读时分不清要访问的是类的属性还是对象的属性)

当使用 对象.类属性 = 值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值
此时,Python解释器在执行赋值语句时并不会执行向上向上查找机制,当执行赋值语句 pig.count = 10 时,会在pig中找查找是否具有count属性,如果没有就会在对象pig(注意其他对象中并不会有count这个属性)中直接添加count属性并赋初值10。
因此,不推荐使用 对象.类属性 来访问类属性。


类方法和静态方法

类方法 就是针对类对象定义的方法。在类方法内部可以直接访问类属性或者调用其他的类方法。
Python使用装饰器 @classmethod 来定义一个类方法。

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

  1. 既不需要访问实例属性或者调用实例方法
  2. 也不需要访问类属性或者调用类方法

此时,我们可以使用静态方法。
Python使用装饰器 @staticmethod 来定义一个静态方法。

示例

需求:

  1. 设计一个游戏类;
  2. 属性:
    2.1 定义一个 类属性:最高分
    2.2 定义一个 实例属性:玩家姓名
  3. 方法:
    3.1 静态方法:显示游戏帮助信息
    3.2 类方法:显示历史最高分
    3.3 实例方法:开始游戏

代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Game(object):

    top_score = 0

    def __init__(self, player_name):
        self.player_name = player_name

    # 创建静态方法
    @staticmethod
    def show_help():
        print("帮助信息:\r\n"
              "1. ××××××\r\n"
              "2. ××××××\r\n"
              "3. ××××××")

    # 创建类方法
    @classmethod
    def show_top_score(cls):
        print(f"历史最高分是:{cls.top_score}")

    def start_game(self):
        print(f"{self.player_name} 开始游戏啦...")


# 查看游戏的帮助信息
Game.show_help()

# 查看历史最高分
Game.show_top_score()

# 创建游戏对象

xiaoming = Game("小明")

xiaoming.start_game()

输出:

帮助信息:
1. ××××××
2. ××××××
3. ××××××
历史最高分是:0
小明 开始游戏啦...

小结

  1. 实例方法 —— 方法内部需要访问 实例属性

    实例方法 内部可以使用 类名. 访问 类属性

  2. 类方法 —— 方法内部 需要访问 类属性

  3. 静态方法 —— 方法内部,不需要访问 实例属性类属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值