Python之类class教程

  1. 类的概述(Class Introduce)

  2. “小明,去买点水果回来做沙拉吧。”,妈妈对小明说。小明也没有再问,就随便买了些苹果,梨子,桔子之类的水果回来。在这里,水果,就是一个类别。它们有共同的属性,如质量,颜色,价格等。在生活中,很多事物都可以归为一个类别。我们也学过很多数据类型,它们有的是整数,有的是字符串,有的是列表。用type命令就能显示出它们的类别出来。现在让我们复习一下所学过的类别吧。在IDLE里输入type和数据,看看它们是什么类别,下面是示例代码:
  3. >>> x = 5
    >>> type(x)                 # 显示x的类别
    <class 'int'>
    >>> string = "Python"
    >>> type(string)             # 显示string的类别
    <class 'str'>
    >>> f = 32.768
    >>> type(f)                  # 显示f的类别
    <class 'float'>
    >>> type([])                 # 显示[ ]的类别
    <class 'list'>
    >>> type(True)              # 显示True的类别
    <class 'bool'>       
    >>>
    >>> from turtle import Turtle  # 从海龟模块导入Turtle类
    >>> t = Turtle()
    >>> type(t)                 # 显示t的类别
    <class 'turtle.Turtle'>
    

    上面的14行以上的都是Python内置的类型,而第16行则是Python自带的海龟模块里面的一个类型,它叫Turtle类。通过Turtle类,我们可以新建一个海龟对象,所新建的海龟都有共同的属性和命令。那么问题来了,这个Turtle类是怎么“制作”出来的? 当然,它是由一个程序员编写的,以供我们学习编程。要学习编写一个Turtle类超出了我们的学习范围。我们现在学习如何编写一个非常简单的类。

  4. 定义类(Define Class)

  5. 我们学习过定义函数,用的是def 关键词。如果要定义一个类,则用的是class关键词。最简单的类是这样的:class  Test:pass。这就定义了一个类,它的名字是Test,它的内容是pass,也就是没有内容,但它可是真正能使用的类。用Turtle类生成一只小海龟也叫做实例化一只小海龟,这只小海龟就是生成的一个对象。 刚才我们定义了一个叫Test的类,那么也能用它生成一个对象,用Test()这个命令就行了,当然我们一般给它取个名字,也可以把这个名字叫做t,以下是示例代码:
  6. >>> class Test:           #  定义类Test
      pass              #  忽略内容
    
    >>> t = Test()            # 实例化Test
    >>> type(t)               # 查看t的类别
    <class '__main__.Test'>
    >>> 
    

    上面我们用Test类实例化了一个对象,这个对象的名字叫t。用type命令能查看到它的类别。上面的类太简单了,我们可以在类中定义一个叫初始化的函数,当实例化对象的时候,这个函数会马上运行,它会对这个对象进行初始化,这个函数的名字一定要是__init__。下面我们来定义它。

  7. >>> class Test:                  # 定义名叫Test的类
       def __init__(self):          # 定义初始化方法
          print("我诞生了。")
    
          
    >>> t = Test()                    # 实例化Test类
    我诞生了。
    >>>  
    

    上面我们定义了初始化函数。需要说明的是,在类中所定义的函数叫方法,它的第一个参数用来表示实例化后的自己,一般用的名称是self(自己)。当实例化的时候,__init__方法就对自己进行初始化。 当然,既然它是函数,也就会有返回值,不过一般初始化方法不用返回数据。函数可不止一个参数,也可能有几个,接下来,我们新建一个叫Point的类,并且给它的初始化方法加了两个参数。以下是代码示例:

  8. >>> class Point:                            # 定义名叫Point的类
       def __init__(self,x,y):            # 定义初始化方法 
          self.x = x                      # 设定属性x,赋值为x
          self.y = y                      # 设定属性y,赋值为y
         	    
    >>> p = Point(10,10)                        # 实例化一个点,x值是10,y值也是10
    >>> print(p.x)                              # 打印p.x的值              
    10
    >>> print(p.y)                              # 打印p.y的值
    10
    >>> p.z = 20                                # 新增一个属性叫z,并赋值
    >>> print(p.z)
    20
    >>>
    

    point在英文中是点的意思,在这里我们用它来代表一个平面坐标点。所有的坐标点都有共同的属性,如x坐标,y坐标。我们定义的Point类就是用来代表坐标点的,注意它的第一个字母为大写,这是一种约定俗成的写法。 Point类的初始化方法里有三个参数,self代表实例化后的自己,x用来代表x坐标的初始值,y用来代表y坐标的初始值。这是我们的一种设定,这三个参数分别用a,b,c理论上也是没有任何问题的。

    第三句代码是self.x = x,我们用它来表示这个点初始化后的x坐标的值是x。self.y = y设定了这个坐标点的y值。 下面是p点实例化时的赋值图:

  9. point python class
  10. 上面在初始化方法中用点号给对象增加了两个变量,它们叫做属性。如果要修改它们的值的话,直接用点号操作符,让它等于某个值就可以了。我们在类之外也可以直接给对象增加属性,如可以写p.z = 20,这样p点又增加了一个属性了。综上所述,定义类的语法是首先用关键词class,然后加空格,接着写上类的名字,这个名字的第一个字母应该用大写,最后就是冒号。通常情况下,我们会定义__init__方法。以下是类的定义示例图:
  11. python类的定义示意图
  12. 定义类,和定义函数相似之处在于,这都是我们的一种设计。类就相当于对象的蓝图或模版,它就像一座工厂,不过它能实例化很多对象。现在我们编写程序,或许先要考虑一下,在程序中会出现什么对象,然后这些对象会有什么共同的性质或行为,然后思考如何把它们定义成一个类。
  13. 练习

  14. 下列代码在IDLE中是什么操作?有什么问题吗?
  15. >>> class fruit
            pass
    

    说说下列IDLE中每行代码的意思。

  16. >>> class Python:
          def __init__(self,length):
            self.length = length
            print("我的长度是:",self.length)
      
        
    >>> snake = Python(100)
    我的长度是: 100
    >>> snake.length = 200
    >>> snake.weight = 300
    >>>
    
    
    • 阅读下列代码,说出每行代码的意思,它的运行结果是什么,代码有什么问题?
    • >>> import random
      >>> class random:
        def __init__(self,x):
          self.x = x * 2
          
      >>> r = random(10)
      >>> print(r.x)
      >>> random.randint(10,20)