-
类的方法(Class Method)
- 在学习类的定义当中,我们学习了__init__,它是初始化函数,并且说了在类中定义的函数也叫方法。在类中还能定义其它的方法。如,哺乳动物有走的行为,我们可以定义相应的走的方法。下面我们定义一个叫Animal的类,它有走的方法。
-
>>> class Animal: # 定义名为Animal的类 def __init__(self,weight): # 实始化方法,有参数名为weight self.weight = weight # 给对象的weight属性赋值为weight def walk(self): # 设定walk方法 print("走一步") # walk方法具体执行的代码 >>> pig = Animal(100) # 实例化一个Animal >>> pig.walk() # 调用pig的walk方法 走一步 >>>
上面的第4行代码定义了一个名为walk的方法,它有一个参数名为self,这个参数用来表示实例化后的对象。 第9行调用了这个walk方法,就像调用函数一样,只不过在点号前面写上对象的名称。调用时,self参数会收到对象名,然后执行方法的代码。上面定义的walk太简单了,方法就是函数,它能接收很多参数,接下来我们定义有更多参数的方法。
-
类的方法示例一(Method Example one)
- 下面我们定义一个有些实用价值的类,它的名字叫Point。我们用它来代表平面上的点。它有两个属性,分别表示x和y坐标,以下是示例代码:
-
>>> class Point: # 定义名为Point的类 def __init__(self,x,y): # 初始化方法 self.x = x # 设定x坐标 self.y = y # 设定y坐标 def move(self,dx,dy): # 定义move方法 self.x = self.x + dx # x坐标增加dx self.y = self.y + dy # y坐标增加dy def distance(self,other): """计算两点的长度""" dx = self.x - other.x dy = self.y - other.y return (dx * dx + dy * dy ) ** 0.5 >>> p = Point(20,20) # 实例化一个点 >>> p.move(80,80) # 把点的x和y坐标各增加80 >>> print(p.x,p.y) # 打印点的坐标 >>> print(p.distance(Point(0,0)) # 打印p点到原点之间的距离
通过move方法把p点的x和y坐标都增加80,就改变了它的坐标。这个点就像左图这样从(20,20)移到了(100,100)的坐标。
在第9行定义了一个叫distance(距离)的方法,它是用来计算两个点的距离的。具体的计算代码不懂没有关系,重点在于第10行写上了这个方法的说明。它是用三引号括起来的字符串,这叫文档字符串。最后函数返回了两点之间的距离。在实际的编码中,我们还要判断other参数是不是一个Point类的实例,在这里省略了。如果对第19行不太明白,可以看看下面这张图示:
- Point(0,0)用来实例化一个对象。p点的distance方法用来计算它和另一个对象的距离。这个距离最后用print打印出来。
-
类的方法示例二(Method Example two)
上面我们定义了一个Point类,它有移动的方法,可是我们看不到这个点的移动过程。如果想让这个点真正的移动起来那多好。这是可以实现的,我们学了海龟画图,可以让它来移动。下面Point类中的初始化方法和移动方法都增加了代码,为的就是有这种可视化效果。代码如下所示:
-
"""可移动的点类.py""" from turtle import Turtle class Point: # 定义名为Point的类 def __init__(self,x,y): # 初始化方法 self.x = x # 设定x坐标 self.y = y # 设定y坐标 self.t = Turtle(shape='circle') # 属性t的值是一只海龟 self.t.color('blue') # 设定颜色为蓝色 self.t.penup() # 抬笔 def move(self,dx,dy): """在水平和垂直方向增加距离""" self.x = self.x + dx # x坐标增加dx self.y = self.y + dy # y坐标增加dy self.t.goto(self.x,self.y) # 坐标变化后让海龟到达指定位置 p = Point(0,0) for i in range(100): p.move(1,1)
上面的代码运行的时候,我们能看到一个蓝点慢悠悠地移动。这是由于在初始化函数中给Point类增加了一个属性t,它的值是一个海龟对象。当每次用move方法改变了点的坐标值的时候就用了海龟的goto方法让它到达这个位置。
李兴球
李兴球的博客是Python创意编程原创博客