青少年python系列 40.面向对象-类

青少年python系列目录_老程序员115的博客-CSDN博客

青少年python教学视频ppt源码

        Python中一切皆为对象,所谓对象,我们自己就是一个对象,房子是一个对象,我们家的小狗也是一个对象。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。

        理解面向对象编程有助于你像程序员那样看世界,还可以帮助你真正明白自己编写的代码:不仅是各行代码的作用,还有代码背后更宏大的概念。

        了解类背后的概念可培养逻辑思维,让你能够通过编写程序来解决遇到的几乎任何问题。随着面临的挑战日益严峻,类还能让你以及与你合作的其他程序员的生活更轻松。如果你与其他程序员基于同样的逻辑来编写代码,你们就能明白对方所做的工作;你编写的程序将能被众多合作者所理解,每个人都能事半功倍。

1 创建类

        分类是人们认识世界的一个很自然的过程,在日常生活中会不自觉地将对象进行进行分类。在编程世界使用类几乎可以模拟任何东西。在python中,我们把具有相同属性和方法的对象归为一个类(class)。类是对象的模板或蓝图,类是对象的抽象化,对象是类的实例化。类不代表具体的事物,而对象表示具体的事物。

        下面来编写一个表示小狗的简单类Dog——它表示的不是一只小狗,而是任何小狗,是狗这个动物物种。对于大多数宠物狗,我们都知道些什么呢?它们都有名字和年龄;我们还知道,大多数小狗还会蹲下和打滚动作。由于大多数小狗都具备上述两项信息(名字和年龄)和两种行为(蹲下和打滚),我们的Dog类将包含它们。这个Dog类可以让Python知道如何创建表示小狗的对象。编写这个类后,我们将使用它来创建表示特定小狗的实例对象。

        根据Dog类创建的每个实例都将存储名字和年龄。我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力。

        这里需要注意的地方很多,但你也不用担心,本节课中有大量的这样的结构,我们会有有很多的机会来熟悉它。在程序第一行,我们定义了一个名为Dog的类。根据约定,在Python中,类名称首字母需要大写。这个类定义中的括号是空的,因为我们要从空白处创建这个类。

        方法__init__(),是在类中的函数称为构造方法,你前面学到的有关函数的一切都适用于它,就目前而言,唯一重要的差别是调用方法的方式。第五行的方法__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动调用、运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定格式,是为了避免Python的默认方法与普通方法发生名称冲突。

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

        第三、四行处定义的两个变量都有前缀self。以self为前缀的变量都可被类中的所有方法使用,我们也可以通过类的任何实例对象,来访问这些变量、方法。self.name = name获取存储在形参name中的我们传递的指定数值,并将其存储到变量name中,然后该变量被关联到当前创建的实例对象中去。self.age = age的作用与此类似。像这样可通过实例访问的变量称为属性。属性也可以理解为是实例对象的一种静态的描述信息,比如小狗的姓名、年龄、毛色、体重、身高等信息。

        Dog类还定义了另外两个方法:sit()和roll_over()(第五、七行)。由于这些方法不需要额外的参数传递值信息,它们只有一个形参self。我们在后面创建的实例对象可以访问这些方法。当前,sit()和roll_over()方法中所做的事情是有限的,它们只是打印一条消息,指出小狗正蹲下或打滚(狗这种物种都会有做这两件事情)。

        随着对实例对象的描述更加精确,我们会对这两个方法进行不断地完善。你也可以对照属性那样去理解,方法也可以理解为是实例对象的一种动态的描述信息,比如小狗的起立、坐下、吠叫、打滚等动作。

2 创建对象

       假如你手上有一份设计蓝图,其中内容描述了一类的事物样貌特征、性能功能等,现在让你按照这个设计蓝图来生产、制造出来这个具体的物体的过程,你就可以理解为是根据类的信息,来创造、创建实例对象的过程。

        Dog类是一系列说明,对类的描述与创建,可以让Python知道如何创建表示特定小狗的实例。

        下面来根据之前创建的Dog类,创建一个表示特定小狗的实例对象:

        我们来观察一下这只小狗的“生产”过程:当Python遇到第九行代码时,根据我们实际传递的参数(实参)'旺财'和6,调用Dog类中的方法__init__(),方法__init__()自动创建一个表示特定小狗的实例对象,并使用我们提供的值来设置该对象的属性name和age信息。

        请注意的是,虽然方法__init__()中并没有包含return语句,也没有任何的返回值信息,但Python会自动返回一个根据我们传递的实际参数信息表示这条小狗的实例对象。并且我们将这个实例存储在我们创建的变量my_dog中。

        在这里,请注意变量名的作用:我们通常可以认为首字母大写的名称(如Dog)指的是类,而小写的名称(如my_dog)指的是根据类创建的实例对象。

3 面向对象

        面向对象编程是最有效的软件编写方法之一。此编程方式的实现是基于对 类 和 对象 的使用。

        我们使用Dog类创建了一只叫旺财的小狗,并可以让它蹲下和打滚。

        我们也可以使用函数实现这一点,那为什么还要使用类与对象呢?

        当我们使用函数时,的确可以实现和类相同的功能,但这是建立在类是一个“小”类,类相当于一堆功能函数的集合:同样,如果一个函数足够“大”,集成的功能足够多,某种程度上,这个函数也成了类。

        使用面向对象的思维编程时,我们在做什么?

        我们将具有相同特征的一类事物进行抽象,变成一个类,而类可以供我们重复使用。

        而对象的创建就是在实例化类,可以重复调用类中的功能来创建一个个不同的对象,满足不同的需求。

        这和函数重复调用很像,但是类与对象实例化程序结构更加清晰明了,便于我们进行管理。

总结

1、创建类

类:在python中,把具有相同属性和方法的对象归为一个类(class)

2、创建对象

对象=属性(特征)+方法(行为)

3、面向对象

面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值