P 面向对象 | 类的结构

2019-10-05  本文已影响0人  Ricsy


一、类

类是一个特殊的对象(类对象)
python中一切皆对象
eg:

  1. 定义的类属于类对象
  2. 创建的实例属于实例对象

1.1 类的结构

面向对象开发中

  1. 设计类
  2. 使用类名()创建对象
    (1) 在内存中为对象分配空间
    (2) 调用初始化方法__init__——对象初始化
  3. 对象创建后,内存中就有一个对象的实实在在的存在——实例
概念 说明
实例 类创建出来的对象叫做类的实例
实例化 类创建对象的动作叫做实例化
实例属性 对象的属性叫做实例属性
实例方法 对象调用的方法叫做实例方法

1.2 类属性和实例属性

概念 说明
类属性 给类对象定义的属性

1. 通常用来记录与这个类相关的特征

2. 不会用于记录具体对象的特征
类方法 给类对象定义的方法

1.2.1 属性的获取机制

1.2.2 类属性访问方式

类名.类属性名
对象名.类属性名不推荐

如果使用对象名.类属性名 = 值的赋值语句,只会给对象增加一个属性,而不会影响到类属性的值,所以不推荐对象名.类属性名

eg:

class Tool:
    # 类属性,用于记录工具对象的总数
    count = 0

    def __init__(self, name):
        self.name = name
        # 修改类属性
        Tool.count += 1


if __name__ == '__main__':
    tool1 = Tool('斧头')
    tool2 = Tool('榔头')
    tool3 = Tool('铁锹')
    tool4 = Tool('筛子')
    tool5 = Tool('梯子')
    tool1.count = 99
    print("工具对象的总个数:%s" % Tool.count)
    print("工具对象的总个数:%s" % tool1.count)
    print("tools对象count属性的值:%s" % tool1.count)


1.3 类方法和静态方法

概念 说明
类属性 给类对象定义的属性

1. 通常用来记录与这个类相关的特征

2. 不会用于记录具体对象的特征
类方法 给类对象定义的方法

1.3.1 类方法

类方法可以直接访问类属性或调用其他的类方法
语法:

@classmethod
def 类方法名(cls):
    pass
名称 说明
self 哪一个实例调用的方法就是那一个实例的引用
cls 哪一个类调用的方法就是那一个类的引用

eg:

class Tool:
    # 类属性,用于记录工具对象的总数
    count = 0

    def __init__(self, name):
        self.name = name
        # 修改类属性
        Tool.count += 1

    # 类方法,用于显示工具对象的总数
    @classmethod
    def show_tool_count(cls):
        print("工具对象的总个数:%s" % cls.count)


if __name__ == '__main__':
    tool1 = Tool('斧头')
    tool2 = Tool('榔头')
    tool3 = Tool('铁锹')
    tool4 = Tool('筛子')
    tool5 = Tool('梯子')
    Tool.show_tool_count()

1.3.2 静态方法

静态方法既不需要访问类属性或调用类方法
静态方法也不需要访问实例属性或调用实例方法

语法:

@staticmethod
def 静态方法名():
    pass

不需要创建对象,直接用类名.来调用静态方法

eg:

class Game:
    # 类属性,记录游戏历史最高分
    top_score = 0

    # 静态方法,显示游戏帮助信息
    @staticmethod
    def show_help():
        print("帮助信息:让僵尸进入大门")

    # 类方法,显示历史最高分
    @classmethod
    def show_top_score(cls):
        print("历史最高分是:%d" % cls.top_score)

    # 初始化
    def __init__(self, player_name):
        # 实例属性,记录当前游戏的玩家姓名
        self.player_name = player_name

    # 实例方法,开始当前玩家的游戏
    def start_game(self):
        print("开始游戏啦...")


# 测试主函数
if __name__ == '__main__':
    xiaoming = Game('小明')
    Game.show_help()
    Game.show_top_score()
    xiaoming.start_game()


更新中......


上一篇 下一篇

猜你喜欢

热点阅读