【Python基础】14.类的结构

类的结构

实例

  1. 使用面向对象开发,首先需要定义
  2. 使用 类名() 创建对象,创建对象的动作有两步
    1. 在内存中为对象 分配空间
    2. 调用初始化方法__init__(self,*args) 为对象初始化
  3. 创建对象后,内存 中就有了对象实际的存在 –实例

因此,通常:

  1. 创建出来的对象,叫做类的实例
  2. 创建对象的动作叫做实例化
  3. 对象的属性叫做实例属性
  4. 对象调用的方法叫做实例方法

在程序执行时:

  1. 对象各自拥有自己的实例属性
  2. 调用对象方法,可以通过self.
    • 访问自己的属性
    • 调用自己的方法
      每个对象都有自己独立的内存空间,保存各自不同的属性
      多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部

类是一个特殊的对象

class A(object):
    pass
  • 在程序运行时,同样会被加载到内存
  • 在python中,类是一个特殊的对象,通常称为类对象
  • 在程序运行时,类对象只有一份,使用一个类可以创建出来多个实例对象
  • 除了封装实例属性方法外,类对象还可以拥有自己的属性和**方法
    1. 类属性
    2. 类方法
  • 通过类名.的方式可以访问类属性或者调用类方法
访问语法访问对象
类名.属性类属性
类名.方法类方法(cls)
类名()__init__定义实例属性
对象名.方法名()实例方法(self)

类属性和实例属性

概念和使用
  • 类属性就是给类对象定义的属性
  • 通常用来记录与这个类相关的特征
  • 类属性不会用于记录实例对象的特征
示例
  • 定义一个工具类
  • 创建一个类属性,每次实例化的时候,类属性数值加1
  • 统计这个类创建了多少个对象
class Tool(object):
    count = 0

    def __init__(self, name):
        self.name = name
        Tool.count += 1


tool1 = Tool("斧头")
tool2 = Tool("锤子")
tool3 = Tool("榔头")
print(Tool.count)
3
属性的获取机制
  1. 访问类属性有两种机制
    • 类名.类属性
    • 对象.类属性
  2. 可以使用对象.类属性访问类属性,源于python有一个向上查找的机制
    1. 首先,在对象内部查找对象属性
    2. 未找到对象属性,则向上查找类属性
  3. 使用赋值语句对象.类属性 = 值,只会创建一个对象属性并为其赋值,不能改变类变量的值

类方法

  • 类属性就是针对类对象定义属性
    1. 使用赋值语句在class 关键字下方定义属性
    2. 类属性用于记录与这个类相关的特征
  • 类方法就是针对类对象定义方法
    • 在类方法内部可以直接使用类属性和调用其他的类方法
定义类方法
@classmethod
def 类方法名(cls):
    pass
  • 类方法需要用修饰器@classmethod来标识,告诉解释器这是一个类方法
  • 类方法的第一个参数是cls
    • cls 传递的是类的引用地址,由哪个类调用,就传递这个类的引用地址
    • 这个参数和实例方法的self参数类似
    • cls参数名支持自定义,习惯用cls
  • 通过类名.类方法调用类方法,不需要传递cls参数
  • 在方法内部:
    • 使用 cls.类属性访问类属性
    • 使用 cls.类方法访问其他类方法
示例
class Tool(object):
    count = 0
    @classmethod
    def show_tool_count(cls):
        print("工具对象的数量 %d" % cls.count)

    def __init__(self, name):
        self.name = name
        Tool.count += 1


tool1 = Tool("斧头")
tool2 = Tool("锤子")
tool3 = Tool("榔头")
print(Tool.count)
Tool.show_tool_count()
3
工具对象的数量 3

静态方法

如果类中的一个方法:

  1. 不使用类属性,也不使用类方法
  2. 不适用实例属性,也不使用实例方法
    就可以将这个方法定义为静态方法
    语法如下:
@staticmethod
def 静态方法名():
    pass
class Tool(object):
    count = 0

    @classmethod
    def show_tool_count(cls):
        print("工具对象的数量 %d" % cls.count)

    def __init__(self, name):
        self.name = name
        Tool.count += 1

    @staticmethod
    def introduce():
        print("这是一个工具类,用来制造工具对象")

Tool.introduce

这是一个工具类,用来制造工具对象

通过类名.静态方法名的方式,调用静态方法,不需要创建对象

案例综合

  1. 定义一个Game类
  2. 属性:
    1. 定义一个类属性 top_score 记录游戏的历史最高记录
    2. 定义一个实例属性 player_game 记录当前游戏的玩家姓名
  3. 方法
    1. 静态方法 show_help 显示游戏帮助信息
    2. 类方法 show_top_score 显示历史最高分
    3. 实例方法 start_game 开始玩游戏
  4. 主程序步骤
    1. 查看帮助信息
    2. 查看历史最高分
    3. 创建游戏对象,并开始玩儿游戏
# 1. 定义一个Game类
# 2. 属性:
#     1. 定义一个类属性 top_score 记录游戏的历史最高记录
#     2. 定义一个实例属性 player_game 记录当前游戏的玩家姓名
# 3. 方法
#     1. 静态方法 show_help 显示游戏帮助信息
#     2. 类方法 show_top_score 显示历史最高分
#     3. 实例方法 start_game 开始玩游戏
# 4. 主程序步骤
#     1. 查看帮助信息
#     2. 查看历史最高分
#     3. 创建游戏对象,并开始玩儿游戏

class Game:
    top_score = 0

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

    @staticmethod
    def show_help():
        print("帮助信息:让僵尸进入大门")

    @classmethod
    def show_top_score(cls):
        print("历史最高分 %d" % cls.top_score)

    def start_game(self):
        print("%s 开始游戏" % self.player_game)


game = Game("小明")
Game.show_help()
Game.show_top_score()
game.start_game()
帮助信息:让僵尸进入大门
历史最高分 0
小明 开始游戏
  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值