美文网首页Python 进阶文集我爱编程
【Python】学习笔记之类|第8篇

【Python】学习笔记之类|第8篇

作者: 繁华落尽丶lee | 来源:发表于2018-04-17 12:44 被阅读28次

    书籍:《Python编程:从入门到实践》
    打卡人:Owenli
    打卡时间:2018.4.17

    Python从入门到实践目录

    前言

    面向对象编程 是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对 象都有的通用行为。基于类创建对象 时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情景,其逼真 程度达到了令你惊讶的地步。
    根据类来创建对象被称为实例化 ,这让你能够使用类的实例。在本章中,你将编写一些类并创建其实例。你将指定可在实例中存储什么信息,定义可对这些实例执行 哪些操作。你还将编写一些类来扩展既有类的功能,让相似的类能够高效地共享代码。你将把自己编写的类存储在模块中,并在自己的程序文件中导入其他程序员编 写的类。

    一、创建和编写类

    Dog类为例,创建一个包含名字和年龄,具有蹲下和打滚能力的类。

    Dog

    类中的函数称为方法,前面学习有关函数的内容在这里都适用。感到困惑的方法,应该就是 __init__()方法。它是一个特殊方法,每当创建实例时都会自动运行它。

    我们将方法__init__() 定义成了包含三个形参:selfnameage 。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。为何必须在方法定义中包 含形参self 呢? 因为Python调用这个__init__()方法来创建Dog 实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身 的引用,让实例能够访问类中的属性和方法。我们创建Dog 实例时,Python将调用Dog类的方法__init__() 。我们将通过实参向Dog() 传递名字和年龄;self 会自动传递,
    因此我们不需要传递它。每当我们根据Dog 类创建实例时,都只需给最后两个形参(name 和age )提供值。

    1.1 根据类创建实例

    上面定义了Dog类,下面看看如何创建Dog实例。

    创建实例my_dog。在打印实例信息时,通过使用.语法来访问属性名。

    访问方法,也是通过.语法。

    my_dog.sit()
    my_dog.roll_over()
    

    类创建实例的个数是不受限制的,可按需求根据类创建任意数量的实例。每个实例之间会不影响,存在不同的内存地址中。

    二、使用类和实例

    修改类属性的方法,可以直接修改实例属性,也可以编写方法以特定的方式进行修改。

    下面定义一个Car类。

    2.1 给属性指定默认值

    类中的每个属性都必须有初始值,哪怕这个值是0或空字符串。设置初始值,可以在__init__()内指定这种初始值,这样就不用设置形参了。

    还是上面的Car类,添加一个odometer_reading属性,并设置默认值为0。

    image.png

    添加了一个read_odometer()方法用来打印里程信息。

    2.2. 修改属性值

    汽车里程是随着使用,逐渐递增的。如何修改属性值呢?

    • 直接修改属性值
    my_new_car.odometer_reading = 23
    my_new_car.read_odometer()
    #  输出结果: This is has 23 miles on it.
    
    • 通过方法修改属性值
    class Car():
          # ....
          def update_odometer(self, mileage):
                """将里程数设为指定值,递增"""
                self.odometer_reading += mileage
    
    my_new_car.update_odometer(34)
    my_new_car.read_odometer()
    # 输出结果: This is has 34 miles on it.
    

    通过使用update_odometer()方法来更新属性的值。

    三、继承

    编写类时,并非总是要从空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承 。一个类继承 另一个类时,它将自动获得另一个类的所有属性和方法;原有的 类称为父类 ,而新类称为子类 。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。

    3.1 子类的方法__init__()

    创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。因此, 需要在初始化方法调用父类的初始化方法。

    在上面我们定义了Car类,通过继承定义一个ElectricCar电动车类。

    上面定义了ElectricCar类继承自Car。子类拥有父类所有的属性和方法。

    在子类的初始化方法中super()是一个特殊函数,帮助Python将父类和子类关联起来。

    3.2 给子类定义属性和方法

    让一个类继承另一个类后,可添加区分子类和父类所需的新属性和方法。

    根据ElectricCar创建的实例都会有这个属性,而Car的实例没有。

    3.3 重写父类方法

    对于父类的方法,只要它不符合子类模拟的实际行为,都可对其进行重写。

        def get_descriptive_name(self):
             """打印名称"""
            long_name = str(self.year) + ' ' + self.make + ' ' + self.model + ' ' + self.battery_size
            return long_name.title()
    

    重写父类get_descriptive_name()多打印battery_size信息。

    3.4 实例做属性

    使用代码模拟实物,随着细节的增加需要代码越来越多。这种情况下可以将类中一部分提取出来,组合成多各类协作的方式。

    添加Battery类,负责电池管理。它的实例是ElectricCar类的一个属性。

    四、小结

    本篇学习Python中类的概念,如何创建类、属性、方法以及类继承等相关知识。由于篇幅问题,下篇继续学习类剩下的内容。

    相关文章

      网友评论

        本文标题:【Python】学习笔记之类|第8篇

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