在编程的过程中经常会使用x.y
的表达式,我把任何跟在点号之后的名称都称为属性。所以表达式x.y
中,y
是x
的一个属性。
类有属性,对象也有属性。
类属性
类属性的定义
直接在类中定义的变量(与class语句只有一个缩进),就是类属性。
案例:
给Point
类创建一个name
属性用来表示点类的名称。
class Point:
"""
表示平面坐标系中的一个点
"""
name = '点'
类属性的访问
类属性直接通过类和对象以句点法访问,语法格式如下:
类.类属性名
对象.类属性名
案例:
# 接上面的代码
>>> print(Point.name) # 直接通过类名访问类属性
点
>>> point=Point() # 创建一个实例
>>> print(point.name) # 通过对象访问类属性
点
注意:如果不存在的属性则会抛出异常
>>> print(Point.a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Point' has no attribute 'a'
对象属性
对象属性的定义
对象属性一般定义在构造方法中,详见下面构造方法一节中。
也可以通过句点法对象.对象属性
以赋值的方式直接定义对象属性。
案例:
平面坐标系中的每个点都有x坐标和y坐标,通过类Point
创建一个对象表示点(x=1,y=2)
>>> point = Point()
# 通过赋值直接定义对象属性
>>> point.x = 1
>>> point.y = 2
对象属性的访问
通过句点法对象.对象属性
可以访问对象属性。
案例:
访问上面案例中point
的x坐标和y坐标
>>> print(point.x)
1
>>> print(point.y)
2
访问对象属性时,首先会检查对象是否拥有此属性,如果没有则去创建对象的类中查找有没有同名的类属性,如果有则返回,如果都找不到则抛出AttributeError的异常