Python-面向对象编程-类属性与类对象

249 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

1. 类是一个特殊的对象

Python中一切皆对象,类同样是一种对象,类对象与实例对象的定义如下所示:

  • class AAA: 定义的类属于类对象
  • obj1 = AAA() 属于实例对象
  1. 在程序运行时,类同样会被加载到内存

  2. 在Python中,类是一个特殊的对象--类对象

  3. 在程序运行时,类对象在内存中只有一份,使用一个类可以创建出很多个对象实例(实例可以有很多个,模板只需要有一个)

  4. 除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法

    • 类属性:给类对象定义的属性叫类属性
    • 类方法:给类对象定义的方法叫类方法
  5. 通过类名.的方式可以访问到类的属性或者调用类的方法

2. 类属性

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

因此,要访问类属性有两种方式:

  1. 类名.类属性
  2. 对象.类属性(不推荐,使用对象名虽然可以获取到类属性,但是这种方法非常容易产生混淆)

在Python中属性的获取存在一个向上查找机制,例如tool.count,首先在对象内部查找对象属性,若没有找到就会向上寻找类属性。

注意:如果使用对象.类属性=值赋值语句,只会给对象添加一个属性,而不会影响到类属性的值。

案例演示:首先定义一个工具类,其中每件工具都有自己的name,要求能够知道使用这个类创建了多少个工具对象。 当使用类名创建对象时,Python的解释器自动帮我们调用初始化方法(因此,我们能在初始化方法内部,每要创建一个对象的时候,数值+1)。

具体代码如下所示:

class Tool(object):
    # 使用赋值语句定义类属性,记录所有工具对象的数量
    count = 0

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

        # 让类属性的值+1
        Tool.count += 1


# 1. 创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")
# 2. 输出工具对象的总数
# 每次初始化方法被调用的时候,我们都会在初始化方法内部,针对类属性加1
print(Tool.count)

运行结果如下图所示:程序中使用Tool创建了三个对象,输出类属性count看看结果如何?

image.png

以上就是类属性的使用,在类名下方使用赋值语句就可以,赋值语句左侧的变量名就是类属性的名称。在开发时,通常使用类属性定义类相关的特征,类属性不会用来记录跟具体对象相关的特征的。