实例属性
大家好!这个章节我们要介绍的是实例属性,这是面向对象编程中一个非常重要的概念。
简介
实例属性是与特定对象(实例)相关联的属性。每个对象可以拥有自己的实例属性,这些属性的值可以不同于同一类的其他对象的属性。

简单来说,实例属性是与特定对象(也就是实例)相关联的属性。每个对象都可以拥有自己的属性,并且这些属性的值是独立的,不同的对象可以有不同的属性值。比如,你可以有一个Student类,表示学生的模板。每个学生对象(比如Tom、Lily)都有自己独特的属性,比如姓名和年龄,而这些属性的值是可以不同的。
动态绑定
Python 中的属性变量都是使用动态绑定的方式绑定到实例对象上的。
格式:实例对象名.实例属性名
class Student:
pass
# 实例对象
s1 = Student()
s2 = Student()
# 为实例对象s1动态绑定属性
s1.name = "Tom"
s1.age = 22
# 访问实例对象s1的属性
print(s1.name)
print(s1.age)
# 输出什么?
print(s2.name)
print(s2.age)
Python是动态绑定的语言,这意味着我们可以在运行时,给对象动态添加属性。通过这种方式,每个对象都可以拥有自己的实例属性。这种做法在其他语言中不常见,在Python中却非常常见。从这个例子你可以看到,给对象Tom动态绑定了name和age属性,而对象s2并没有绑定这些属性。所以如果我们尝试访问s2的这些属性,会发现它并没有这些属性。这就是动态绑定的方式:只有在给某个实例绑定了属性之后,它才会有这些属性,其他没有绑定的对象是没有这些属性的。
从代码中可以看出,在使用动态绑定属性时,给哪个实例对象绑定的属性,哪个对象才会拥有属性变量,没有绑定的则没有。
这显示是不符合面向对象思想的。
正常的实例属性定义在下一章节中讲解。
在上面的代码中,我们通过动态绑定给Student类的实例对象s1添加了属性name和age,并且成功访问了它们。但是对于s2,它并没有这些属性,所以会导致错误。这种做法虽然灵活,但也暴露了面向对象编程中的一些问题。每次在实例对象上动态添加属性都会让代码变得不规范,而且容易导致错误。如果要遵循面向对象的思想,实例属性应该在类的构造方法中定义,而不是在外部直接绑定。
总结
- 实例属性概念
- 动态绑定
最后来总结一下,这个章节我们讲解了实例属性的概念。实例属性是与特定对象(实例)相关的属性,每个对象都有自己独特的属性值。Python的动态绑定特性使得我们可以在运行时为对象动态添加属性,这样每个对象可以拥有自己的数据。然而,动态绑定虽然灵活,但也可能导致不符合面向对象编程的规范。所以,实例属性通常是在类的构造方法中定义的,这样代码会更加规范和清晰。