Python 面向对象 - 06 类属性、实例属性、类方法、静态

2019-03-03  本文已影响0人  flowerflower
😯😯

目录
一、类的结构
1.1 术语 —— 实例
1.2 类是一个特殊的对象
二、类属性和实例属性
2.1 概念
2.2 属性的获取机制
三、类方法和静态方法
3.1 类方法
3.2 静态方法
四、方法综合案例

一、类的结构

1.1 术语 —— 实例

  1. 使用面相对象开发,第 1 步 是设计
  2. 使用 类名() 创建对象,创建对象 的动作有两步:
      1. 在内存中为对象 分配空间
      1. 调用初始化方法 __init__对象初始化
  3. 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例

因此,通常也会把:

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

在程序执行时:

  1. 对象各自拥有自己的 实例属性
  2. 调用对象方法,可以通过 self.
    • 访问自己的属性
    • 调用自己的方法

结论

1.2 类是一个特殊的对象

Python一切皆对象

  • class AAA: 定义的类属于 类对象
  • obj1 = AAA() 属于 实例对象

二、类属性和实例属性

2.1 概念

示例需求

class Tool(object):
    # 使用赋值语句,定义类属性,记录创建工具对象的总数
    count = 0
    def __init__(self, name):
        self.name = name
        # 针对类属性做一个计数+1
        Tool.count += 1
# 创建工具对象
tool1 = Tool("水桶")
tool2 = Tool("石头")
tool3 = Tool("锤子")
# 打印结果: 现在创建了 3个工具
print("现在创建了 %d 个工具" % Tool.count) 

2.2 属性的获取机制

注意


三、类方法和静态方法

3.1 类方法

3.1.1 概念
3.1.2 语法格式
@classmethod
def 类方法名(cls):
    pass
3.1.3 示例
class Person(object):
    count = 0
    # 类方法
    @classmethod
    def show_count(cls):
        print("数量为%d" % cls.count)
    def __init__(self,name):
        self.name = name
        Person.count += 1

p = Person("zhangsan01")
p1 = Person("zhangsan02")
Person.show_count()

3.2 静态方法

3.2.1 概念
3.2.2 语法格式
@staticmethod
def 静态方法名():
    pass
3.2.3 示例
class Person(object):
    # 静态方法
    @staticmethod
    def show():
# 不需要访问实例属性也不需要访问类属性的方法
        print("show")
# 类名.调用静态方法  不需要创建对象
Person.show()

四、方法综合案例

需求

  1. 设计一个 Game
  2. 属性:
    • 定义一个 类属性 top_score 记录游戏的 历史最高分
    • 定义一个 实例属性 player_name 记录 当前游戏的玩家姓名
  3. 方法:
    • 静态方法 show_help 显示游戏帮助信息
    • 类方法 show_top_score 显示历史最高分
    • 实例方法 start_game 开始当前玩家的游戏
  4. 主程序步骤
    • 1 查看帮助信息
    • 2 查看历史最高分
    • 3 创建游戏对象,开始游戏
class Game(object):
    # 游戏成绩记录,类属性
    top_score = 0
    
    def __init__(self,player_name):
        self.player_name = player_name

    @staticmethod
    def game_help():
        print("游戏帮助,让用户进入游戏")

    @classmethod
    def show_top_score(cls):
        print("历史记录 吃鸡次数 … %d " %(cls.top_score))
    
    def start_game(self):
        print("%s要开始吃鸡了" % (self.player_name))
        # 使用类名.修改吃鸡次数
        Game.top_score = 10

# 1.查看游戏帮助
Game.game_help()

# 2. 查看游戏记录
Game.show_top_score()

# 3. 创建游戏对象,开始游戏
zhangsan = Game("张三")
zhangsan.start_game()

# 4. 游戏结束,查看游戏最高分
Game.show_top_score()

案例小结

  1. 实例方法 —— 方法内部需要访问 实例属性
    • 实例方法 内部可以使用 类名. 访问类属性
  2. 类方法 —— 方法内部 需要访问 类属性
  3. 静态方法 —— 方法内部,不需要访问 实例属性类属性
上一篇下一篇

猜你喜欢

热点阅读