python教程之类的方法method

  1. 类的方法(Class Method)

  2. 在学习类的定义当中,我们学习了__init__,它是初始化函数,并且说了在类中定义的函数也叫方法。在类中还能定义其它的方法。如,哺乳动物有走的行为,我们可以定义相应的走的方法。下面我们定义一个叫Animal的类,它有走的方法。
  3. >>> 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太简单了,方法就是函数,它能接收很多参数,接下来我们定义有更多参数的方法。

  4. 类的方法示例一(Method Example one)

  5. 下面我们定义一个有些实用价值的类,它的名字叫Point。我们用它来代表平面上的点。它有两个属性,分别表示x和y坐标,以下是示例代码:
  6. >>> 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行不太明白,可以看看下面这张图示:

  7. point点实例化距离
  8. Point(0,0)用来实例化一个对象。p点的distance方法用来计算它和另一个对象的距离。这个距离最后用print打印出来。
  9. 类的方法示例二(Method Example two)

    上面我们定义了一个Point类,它有移动的方法,可是我们看不到这个点的移动过程。如果想让这个点真正的移动起来那多好。这是可以实现的,我们学了海龟画图,可以让它来移动。下面Point类中的初始化方法和移动方法都增加了代码,为的就是有这种可视化效果。代码如下所示:

  10. """可移动的点类.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方法让它到达这个位置。