在定义类时,经常需要抽象出它的属性,并定义在类的主体中。下面就来介绍与类属性相关的内容。
常量属性
在类中定义的属性有常量属性和成员属性之分。在Java语言中常量属性用final关键字修饰,常量只能赋值一次,在程序中不能修改它的值。在Python语言中没有专门定义常量的方式,通常使用大写变量名表示,仅仅是一种提示效果,实质上还是变量。
例如:
Circle类中成员属性PI是圆周率,圆周率是一个常量,使用大写字母来声明。
成员属性
成员属性是抽象出来的类属性,成员属性不能直接被外部访问或修改,需要通过get和set方法来访问或修改属性值,成员属性一般声明为私有变量,禁止外部直接访问。
成员属性的作用范围为整个类文件,作用范围就是成员属性的有效工作范围,在整个类文件中,成员属性都可以被访问和使用。
例如:
Circle类有两个成员属性,分别是PI(圆周率)、_r(半径),PI属性被修饰为常量,_r被修饰为私有变量,禁止外部访问和修改。外部如果要访问和修改_r属性,需要调用类提供的getRadius()和setRadius()方法,如getRadius()方法可以获取_r属性的值,setRadius()方法可以设置_r属性的值。属性的初始化可以通过类的构造方法来实现。
成员属性是类所表述事物的共同特征,成员属性一般不能被外部直接访问和修改,必须通过类提供的get和set方法访问和修改成员属性。在类中除成员属性外使用的变量都是临时变量,临时变量一般用于类内部存储临时数据使用,不需要提供get和set方法。
在封装一个类时,不仅要给出类的属性,还要给出类的方法。下面主要介绍如何封装类的方法。
类方法是类行为的抽象,如同类属性是类特征的抽象。类方法是由多条语句组成的语句块,并完成类的某一项功能,类方法使用def关键字修饰。类方法的声明语法如下:
def method:
语句块;
其中def是声明方法的关键字,method是要声明的方法名称,语句块另起一行书写。例如在声明的Circle类中,getRadius()和setRadius()都是类方法。__init__是类的构造方法,是类提供的一个特殊方法,当Python解释器把类实例化为对象时,它首先为要创建的对象分配内存空间,然后调用类的构造方法初始化类成员属性,最后返回对象实例的引用给声明的对象变量。
在前面Circle类的基础上,下面的代码添加了计算圆面积的方法。
Circle类的Area()方法用于计算圆的面积,并将计算结果返回给调用者。