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