21、类

作者: 魔方宫殿 | 来源:发表于2022-04-05 23:48 被阅读0次
    Life is short, you need Python!

    上集回顾:

    1. 打开文件
    2. 写文件
    3. 读文件
    4. 文件流位置

    日常生活中许多人会把东西分类整理,同一类东西会有一些相同的特性和使用方法。
    程序中也存在这样的分类方法,把具有相同属性和方法的放到一个类型当中,就称为一个类。

    一、类的定义
    最简单的类定义形式如下:

    class ClassName:
        <语句-1>
        .
        .
        .
        <语句-N>
    

    与函数定义 (def语句) 一样,类定义必须先执行才能生效。在实践中,类定义内的语句通常都是函数定义,但也可以是其他语句。类里的函数定义一般是特殊的参数列表,这是由方法调用的约定规范所指明的。
    例如定义一个圆,会有属性x坐标、y坐标和半径,还有求圆面积的方法,这个类可以这么定义:

    import math
    
    class Circle:
        ''' 默认圆心为坐标原点,默认半径为1 '''
        px = 0
        py = 0
        r = 1
    
        def __init__(self, r = 1, px = 0, py = 0) :
            self.r = r
            self.px = px
            self.py = py
    
        def area(self) :
            return math.pi * self.r * self.r
    
    
    print(Circle.px)
    print(Circle.py)
    print(Circle.r)
    c = Circle()
    print(c.area())
    

    保存为test.py,在命令行执行结果为:

    $ python test.py
    0
    0
    1
    3.141592653589793
    

    二、实例对象
    一旦类定义完成以后,就可以随时创建一个属于这个类的具体实例,这个过程就叫做创建实例对象(宅男就再也不会缺少对象了)。例如上面的c = Circle()就是创建了一个叫c的示例对象,c的圆心是坐标原点,半径是1。同样还可以创建c2 = Circle(2, 1, 1),这时就创建了c2对象,c2的半径是2, 圆心坐标是(1, 1)。

    再定义一个Dog类,狗的种类用kind,狗的名字叫name:

    >>> class Dog:
    ...     kind = "泰迪"
    ...
    ...     def __init__(self, name) :
    ...             self.name = name
    ...
    >>> d1 = Dog("阿黄")
    >>> d2 = Dog("大黄")
    >>> d1.kind
    '泰迪'
    >>> d2.kind
    '泰迪'
    >>> d1.name
    '阿黄'
    >>> d2.name
    '大黄'
    

    可以直接修改对象的kind属性,不会影响类的属性。

    >>> d2.kind = "金毛"
    >>> d2.kind
    '金毛'
    >>> d2.name
    '大黄'
    >>> d1.kind
    '泰迪'
    >>> d1.name
    '阿黄'
    >>> d3 = Dog("小贝")
    >>> d3.kind
    '泰迪'
    >>> d3.name
    '小贝'
    

    可以看到修改了d2的kind只会影响到d2,d1的kind不会改变,后面新创建的对象kind也不受影响。

    三、继承
    既然是分类,就会有大类小类,每个大类又能细分成不能的小类,一般小类会有大类的所有特性,而又会有一些自己特有的属性,这就是继承。例如狗是一个小类,大类可以是有毛的动物。很容易知道所有的狗都是有毛的动物,但是有毛的动物并不一定都是狗,也可能是猫。继承的格式如下:

    class DerivedClassName(BaseClassName):
        <语句-1>
        .
        .
        .
        <语句-N>
    

    改写一下Dog类:

    >>> class FurAnimal:
    ...     discription = "很多毛"
    ...
    >>> class Dog(FurAnimal):
    ...     kind = "泰迪"
    ...
    ...     def __init__(self, name):
    ...             self.name = name
    ...
    >>> Dog.discription
    '很多毛'
    >>> d1 = Dog("大黄")
    >>> d1.name
    '大黄'
    >>> d1.kind
    '泰迪'
    >>> d1.discription
    '很多毛'
    

    可以发现,Dog类只是改动了一点点,就直接拥有了父类的属性,还可以继承到方法,这就是类和继承的魅力。


    本集总结:

    1. 类的定义
    2. 实例对象
    3. 继承

    下集见

    相关文章

      网友评论

        本文标题:21、类

        本文链接:https://www.haomeiwen.com/subject/towmjrtx.html