类的说明
类是面对对象编程最重要的工具(Object-oriented programming),对象(object)是类(class)的一个实例(instance),例如一个圆,半径可能是5,可能是15,具体半径的圆就是实例化后的对象,圆就一个类。一个矩形,长和宽分别是5,3,矩形是类,指定了矩形的属性(attribute)就是一个对象。同样一个类还可以包含对应的方法(method),圆可以是获取圆的周长或者面积,矩形同样也是。
由此可知,一个类通常由数据域(data fields)和方法(method)组成,当然还包括构造函数(init)
python类的私有变量通过变量名前加上两个下划线(__),私有变量在类外不能直接更改或者访问,需要通过set和get函数来访修改及访问
下面介绍如何描述一个类
UML描述类
采用UML Class Diagram描述一个类
Circle |
---|
radius:float |
Circle(radius = 1:float) |
getArea():float |
getPerimeter():float |
setRadius(radius:float):None |
采用UML描述一个类,主要是三个部分:
第一部分
类名(circle)
第二部分
数据域(data fields),包括类数据名称和数据类型(数据名称:数据类型)
第三部分
是方法(method)。包括构造函数(constructor)和一般的方法(method)
构造函数的描述:
类名(参数名称=默认值:参数类型)
一般方法的描述:
方法名称(参数名称:参数类型)
UML示例2
TV |
---|
channel:int |
volumeLevel:int |
on:bool |
TV() |
turnOn():None |
turnOff():None |
getChannel():int |
setChannle(channel:int):None |
getVolume():int |
setVolume(volumeLevel:int):None |
channelUp():None |
channelDown():None |
volumeUp():None |
volumeDown:None |
关于self
类内的变量需要用self.para表示,这个变量的作用域是整个类,例如圆的半径,用self.radius表示
构造函数(初始化函数)self后面的变量是构造函数的参数,用来初始化类内变量的。通常在构造类的时候作为参数传递初始化对象
如果初始化对象不需要参数,例如下面的tv,就不用传参数。
类定义示例代码
class TV:
def __init__(self):
self.channel = 1
self.volumeLevel = 1
self.on = False
def turnOn(self):
self.on = True
def turnOff(self):
self.on = False
def getChannel(self):
return self.channel
def setChannel(self, channel):
if self.on and 1 <= channel <= 120:
self.channel = channel
def getVolume(self):
return self.volumeLevel
def setVolumeLevel(self, volumeLevel):
if self.on and 1 <= volumeLevel <= 7:
self.volumeLevel = volumeLevel
def channelUp(self):
if self.on and self.channel < 120:
self.channel += 1
def channelDown(self):
if self.on and self.channel > 1:
self.channel -= 1
def volumeLevelUp(self):
if self.on and self.volumeLevel < 7:
self.volumeLevel += 1
def volumeLevelDown(self):
if self.on and self.volumeLevel > 1:
self.volumeLevel -= 1
def show(self):
print('current channel:{:d},current volumeLevel:{:d}'.format(self.channel,
self.volumeLevel))
类使用示例代码
```python
def main2():
tv1 = TV()
tv1.turnOn()
tv1.getChannel() # 1
tv1.getVolumeLevel() # 1
tv1.show()
tv1.setChannel(5)
tv1.setVolumeLevel(5)
tv1.getChannel() # 5
tv1.getVolumeLevel() # 5
tv1.show()
tv1.channelDown()
tv1.volumeLevelDown()
tv1.getChannel() # 4
tv1.getVolumeLevel() # 4
tv1.show()