在定义类时,经常需要抽象出它的属性,并定义在类的主体中。下面就来介绍与类属性相关的内容。
常量属性
在类中定义的属性有常量属性和成员属性之分。在Java语言中常量属性用final关键字修饰,常量只能赋值一次,在程序中不能修改它的值。在Python语言中没有专门定义常量的方式,通常使用大写变量名表示,仅仅是一种提示效果,实质上还是变量。
例如:
#声明一个圆类 class Circle: #声明圆周率 PI = 3.14; #声明半径 r = 1.0;
Circle类中成员属性PI是圆周率,圆周率是一个常量,使用大写字母来声明。
成员属性
成员属性是抽象出来的类属性,成员属性不能直接被外部访问或修改,需要通过get和set方法来访问或修改属性值,成员属性一般声明为私有变量,禁止外部直接访问。
成员属性的作用范围为整个类文件,作用范围就是成员属性的有效工作范围,在整个类文件中,成员属性都可以被访问和使用。
例如:
#声明一个圆类 class Circle: #声明圆周率 PI = 3.14; #声明半径 _r = 1.0; #声明构造函数 def __init__(self,r): self._r = r; #声明设置半径的方法 def setRadius(self,r): self._r = r; #声明获取半径的方法 def getRadius(self,r): return self._r;
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类的基础上,下面的代码添加了计算圆面积的方法。
#声明一个圆类
class Circle:
#声明圆周率
PI = 3.14;
#声明半径
_r = 1.0;
#声明构造函数
def __init__(self,r):
self._r = r;
#声明设置半径的方法
def setRadius(self,r):
self._r = r;
#声明获取半径的方法
def getRadius(self,r):
return self._r;
def Area(self):
return self.PI * self._r * self._r;
#实例化Circle对象
circle = Circle(16.5);
print("圆的面积为:%s" % (circle.Area()));Circle类的Area()方法用于计算圆的面积,并将计算结果返回给调用者。