当前位置:首页>python>小白学python第75天之面向对象其他特性

小白学python第75天之面向对象其他特性

  • 2026-09-04 03:58:02
小白学python第75天之面向对象其他特性

2.20

面向对象其他特性

?

学前疑问

你是不是也曾困惑: 当Python中需要一个与类相关的功能时,何时该用类属性、何时用类方法、又何时用静态方法?比如,想统计一个类创建了多少个对象,是该定义在类里、对象里,还是完全独立?

1

面向对象其他特性

(1)类属性

Python中,属性可以分为实例属性和类属性。

类属性就是 类对象中定义的属性,它被该类的所有实例对象所共有。通常用来记录 与这类相关 的特征,类属性 不会用于记录 具体对象的特征。

在Python中,一切皆对象。类也是一个特殊的对象,我们可以单独为类定义属性。

class Person(object):    # 定义类属性    count = 0    def __init__(self, name, age):        self.name = name        self.age = agep1 = Person('Tom', 23)p2 = Person('Harry', 26)

(2)类属性代码实现

定义count类属性,用于记录实例化Person类,产生对象的数量。

class Person(object):    # 定义类属性count    count = 0    # 定义一个__init__魔术方法,用于进行初始化操作    def __init__(self, name):        self.name = name        # 对count类属性进行+1操作,用于记录这个Person类一共生成了多少个对象        Person.count += 1# 实例化对象p1p1 = Person('Tom')p2 = Person('Harry')p3 = Person('Ben')# 在类外部输出类属性print(f'我们共使用Person类生成了{Person.count}个实例对象')

(3)类方法

为什么需要类方法,在面向对象中,特别强调数据封装性。所以不建议直接在类的外部对属性进行直接设置和获取。所以我们如果想操作类属性,建议使用类方法。

基本语法:

@classmethoddef 类名称(cls):    pass

类方法需要用修饰器" @classmethod "来标识,告诉解释器这是一个类方法类方法的第一个参数应该是" cls "。

① 有哪一个类调用的方法,方法内的" cls "就是哪一个类的引用。

② 这个参数和示例方法的第一个参数是"self"类似。

③ 提示使用其他名称也可以,不过习惯使用" cls " 通过类名.调用类方法,调用方法时,不需要传递" cls "参数。

在方法内部① 可以通过"cls."访问类的属性  ② 也可以通过 "cls." 调用其他的类方法。

案例:

class Tool(object):    # 定义一个类属性count    count = 0    # 定义一个__init__初始化方法    def __init__(self, name):        self.name = name        Tool.count += 1    # 封装一个类方法,专门实现对Tool.count类属性进行操作    @classmethod    def get_count(cls):        print(f'我们使用Tool类共实例化了{cls.count}个工具')t1 = Tool('斧头')t2 = Tool('榔头')t3 = Tool('铁锹')Tool.get_count()

类方法主要用于操作类属性或类中的其他方法

(4)静态方法

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

① 既 不需要访问实例属性或者调用实例方法

② 也 不需要访问类属性或者调用类方法

这个时候,可以把这个方法封装成一个静态方法

基本语法:

@staticmethoddef 静态方法名():    pass

案例:

# 开发一款游戏class Game(object):    # 开始游戏,打印游戏功能菜单    @staticmethod    def menu():        print('1、开始游戏')        print('2、游戏暂停')        print('3、退出游戏')# 开始游戏、打印菜单Game.menu()

今日学习完毕,课后作业: 

设计一个Game类

(1)属性:

① 定义一个类属性top_score记录游戏的历史最高分

② 定义一个实例属性player_name记录当前游戏的玩家姓名

(2)方法:

① 静态方法show_help显示游戏帮助信息

② 类方法show_top_score显示历史最高分

③ 实例方法start_game开始当前玩家的游戏

最新文章

随机文章