如何学python 第十七课 类-面向对象的概念

欢迎回来。今天要说的东西将会改变我们写程序的方式。今天我们介绍‘类’(class)。

概述

什么叫‘类’?类,类型。变量类型。从日常生活的感觉来说,‘类’其实是具有共同特征的一‘类’东西。比如在坐的各位都是人类,动物世界除了人类还有猫类狗类等等,只不过我们平时不那么叫。‘人类’内含了很多共同特征,比如都有皮肤,都有脑袋等等这些‘部件’;一个正常的人类也会有一些除了部件外的‘动作’,比如跑步、打球、看电影等等。在编程的概念里,‘部件’就是类的成员变量,‘动作’就是类的成员方法。‘类’就像是一个模子,我们可以根据这个模子来创建具体的具有这个‘类’的一切特征的‘对象’。这可能跟常识不太相符,因为现实生活中是现有的‘人’,后有的人类概念。在编程里,我们先设计‘类’,再根据类创建具体的对象。

也就是说,对于这种理想中的‘变量与动作集合’,我们不再需要分门别类的单独定义好多实际上有内在联系的变量和操作。这使得编程更加的容易;写程序的人可以更专注于程序本身是如何解决问题的,而不是哪个地方的变量或者具体操作出了问题。这一小结是我个人的理解,欢迎讨论。

具体操作

  1. 定义类

当我们使用类的时候,首先需要创建一个类。使用关键字class可以做到这点;你还需要给这个类起个名字和继承关系。我们稍后会介绍继承。

  1. 初始化

有了类之后,要定义一个初始化器。它会在我们创建类的实例的时候被运行。(嗯,创建类的实例的意思就是用类创建了一个对象。。。)

比如我们用‘人’这个类创建了一个实例,那么在大天朝,你就需要有身份证号、名字、

性别等等基本信息,要不然就是黑户。。。而初始化,就是设置这些基本的值。

为了达成这个目的,我们需要创建一个叫做__init__的函数(那是两个下划线).如果这个函数存在,那么它必须是类中的第一个函数。

  1. 在初始化中对自身属性赋值

__init__函数和别的函数差不多。但是,想要完成初始化,还需要复杂一点的技巧:self。self只在类的方法中存在,self指向的是类实例对象本身(不是类本身)。

有了self,我们就可以通过self.(属性)的格式来设置成员变量。

  1. 成员函数

我们定义两个成员函数。一个是吃,一个是睡。

定义成员函数的方法和定义普通函数没有什么区别,除了需要用self作为参数之外。

我们通过这种方式设计了吃喝睡。吃的话,会先判断一下是不是真的饿了,如果真饿了,就吃;不然的话就就去玩儿。至于睡,睡一下就会涨一岁。(好吧这个设定有点怪)

  1. 创建实例

我们有了这么一类人。他们来自中国,他们很饿,他们只有十二岁。但是如果想要利用这个‘模子’制造出具体可操作的对象,还需要进行实例化。像下面这样:

我们可以看看它里面的变量是不是像想象中的一样,被__init__函数赋值好了:

好了:再调用一下函数:

至此,类的基础内容已经结束了。

小结

今天讲了很多内容,希望大家都能理解。关于‘类’,要学习的还有很多。类的概念让我们解决问题的方式上升到了新的高度。我知道这节课的内容可能不是太好懂,所以如果有疑问的话,尽管留言。

原文发布于微信公众号 - 玄魂工作室(xuanhun521)

原文发表时间:2016-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iKcamp

翻译连载 | 第 9 章:递归(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 9 章:递归(上) 在下一页...

23190
来自专栏企鹅号快讯

列表和元组有什么区别

如果有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改。除了列表是用中括号表示而元组是用小括号表示之外...

25370
来自专栏阿凯的Excel

统计符合某一条件的最大最小平均值

If、Min、Max、Count、Sum、Average、Countif、Sumif,以上八个统计函数都熟知用法没有。重口难调,如果以上的用法不是很熟悉的话,可...

35250
来自专栏Albert陈凯

理解Scala的函数式风格:从var到val的转变

Scala允许你用指令式风格编程,但是鼓励你采用一种更函数式的风格。如果你是从指令式的背景转到Scala来的——例如,如果你是Java程序员——那么学习Scal...

23830
来自专栏C语言C++游戏编程

因为有你,所以出彩!C语言编程中不可或缺的条件判断和循环

在编程语言中,判断和循环可以说是最重要的之一,正因为实现了它们的功能,才能够有如今各种各样功能的程序。今天小编带大家来了解一些条件判断和循环的知识。

14330
来自专栏带你撸出一手好代码

lambda表达式杂谈

上面的数据存放着一组人员姓名、年龄、性别相关的信息。 现在有一个需求, 获得年龄20岁以上,性别为女的人的姓名。 看到需求后, 很多人脑袋中产生的解决方案可能是...

34240
来自专栏贾老师の博客

浮点数存储格式

13530
来自专栏学习力

《Java从入门到放弃》JavaSE入门篇:运算符

17460
来自专栏java一日一条

Java面试题:多继承

招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的...

19140
来自专栏趣谈编程

选择排序

面试官: 聊聊选择排序 选择排序是一种简单直观的算法,今天我们聊聊选择排序的思想,代码以及复杂度 排序思想 一天,小一尘和师傅下山去了,在集市中路经一个水果摊,...

33980

扫码关注云+社区

领取腾讯云代金券