Python类(一)

说明如下:

不是我喜欢炫耀英语,这只是向大家展示资料权威的一种形式。因为毕竟我的有些小观点和曾经流行的培训不太一样。所以,必须引用英文原版的东西,来打消读者的疑虑。

In an informal sense, in Python we do things with stuff. “Things” take the form of operations like addition and concatenation, and “stuff” refers to the objects on which we perform those operations.

Some what more formally, in Python, data takes the form of objects—either built-in objects that Python provides, or objects we create using Python classes or external language tools such as C extension libraries.

以上的大体意思是:

不太规范的说法是,Python用物做事,做事的意思是像加法和连接之类的操作,而物是指我们对其操作的(物体-对象)。

如果规范一点讲,在Python里,数据是以对象的形式存在的,要么是Python提供的内置对象,要么是我们使用class创建的,或者用外部其他语言比如C创建的文库。

1.Programs are composed of modules.

2.Modules contain statements.

3.Statements contain expressions.

4.Expressions create and process objects

这四句话很重要,我在其他地方没有看到过。我们从下面说起,

第四,表达式创建对象和处理对象;

第三,语句包含表达式;

第二,模块包含语句;

第一, 程序有模块组成。

如果暂时并不十分理解上面的中英文,可以不用担心,先搁置一边,以后有机会再回来仔细品味。

下面开始讲解类这个容易让初学者发懵东西,材料完全来自MIT视频教学中的PPT整理而成。做过删节和更改,便于初学者理解。里面的代码有的是我添加上去的,以帮助理解。这是第一部分,第二部分也会陆续面世。如果有反馈,可能会根据反馈做个问答。笔者因为最近很忙,所以第二部分以及答疑不一定很快,敬请谅解。

我们先说对象,在Python代码中,你可能会看到下面的东西:

1235 3.14159 “Hello” [1,2,5,9]

{“CA”: “California”, “MA”:“Massachusetts”}

这些都称作对象,当然,他们还有自己的类型,比如字符串,字典等,但他们都是对象(object)。并且在Python里面每个对象都有下面的特点:

  1. 都有类型,都属于某种类型

  2. 都有自己内部的表达方式(或者是原型,或者是复合的结构)

  3. 都有一系列可与其他对象交互的特定方式方法

  4. 可以这么说,对象就是类的实例

比如上面的1235是int类型的实例,“hello”是字符串类型的实例,所以有一句名言叫做,在Python里面一切皆对象(都有类型)

类型(类就是类型,只不过多用于称呼自己创建的类型,就是一种习惯叫法不同而已,这大概是初学者第一个晕菜的地方吧)关于对象,还有:

可以创建某些类型的对象;

可以操作(操纵)对象

可以销毁对象(这时候是用del或干脆无视就行,因为Python会自行处理销毁对象,这也是Python相比C语言等在垃圾回收方面的简单之处。)

还可以这么理解:

什么是对象?

对象就是数据的抽象,通过数据的属性来在内部显现和表达。(这句话不好理解,暂时放过)

是个与其他对象交互的界面

通过方法(就是函数)来定义行为但却隐藏如何达成这个行为。

举例:

[1,2, 3, 5] 是列表,属于列表类型,那么列表类型内部是如何表达(构成)的?其实我们使用列表的人,无需知道列表的内部结构,只要我们会用就行,比如我们会对列表进行如下操作:

L[i],L[i:], +

Len(),min(), max(), del(L[i])

L.append(),L.extend(), L.count(), L.index(),

L.insert(),L.pop(), L.remove(), L.reverse(), L.sort()

(如果你对上面的操作方法都一一练习了,我认为你是真正的学习者)

上面啰里啰嗦讲解了那么多,其实就是告诉大家,如果你学习到类这一章节,其实你已经对类很熟悉了,只不过这些类和对象(实例)是Python内部自带的,而所谓内部自带也是人写的,被大家公认为Python的一部分,所以成了标配。还有一类叫做第三方库,其实就是人们公认,虽然没有随着Python安装而安装,但已经成为流行的第三方库了,所以可以用下载安装并用import导入使用,哪一天,你写的类如果成为第三方库,那你就牛逼了。

使用类和创建类有什么不同?

大体上来说是这样的:

创建类包括定义类的名称和其他类的组成部分,定义类的数据属性(相当于对象的定义),定义类的方法(相当于如何使用对象),而使用者,大体上是这样的:

创建类的实例(对象),在对象上面进行某种操作,下面我们举例:

我们创建一个坐标类,至于语法,请详见我翻译的小册子或者任何一本权威的Python书籍即可,我不再重复,请看图中代码和图后的解释:
Python类(一)_第1张图片
学习类,self是一个关键点,其实,一开始不太理解,可以直接这么理解,这个self就是指的下面代码中的c,zero等对象。以及今后创建的任何一个对象。因为类就像一个模板,可以任意创建n个对象。至于更深的理解需要一些对frame的理解。这里就不说了。奥,对象的创建就是用这个格式Coordinate(3,4), 这个本质是调用类里面的那个init方法,所以是两个参数,而self是指对象本身,所以,就不能再是参数了。我发觉这么解释可能还不够。待会吧,我先说我加上的一些内容,大家需要注意到,我加的print语句里面加了一些打印c, c的类型,列表,字符串的类型等,就是告诉读者,这个自己写的类和以前你学习过的列表类,字符串类是一样一样的。

下面我们再在类里面写一个方法,就是写一个函数,注意类里面的函数之所以叫做方法,是因为和外面的函数不一样,外面的函数是独立的,没有约束的,可以随意拿来使用的,而类里面的方法只能用于这个定义的类,或者说,只能用于用类创建的对象。并且调用的时候,是习惯用点连接符来调用的,下面我们看图中代码:
Python类(一)_第2张图片
我们在类中定义了一个方法,用来测量创建的坐标对象之间的距离的。里面的语句计算距离,不再解释,需要提请注意的就是这个方法和函数的定义是一模一样的,除了有个自动添加的self以外,还有调用时使用点符号,其他和函数是一模一样的。

另外,在创建对象后,除了用点符号来调用方法外,还可以使用用类名来调用类内部的方法,而这时,方法的参数就要包括两个对象了,也就是原来在类内部的self被真正的对象所取代。想一想,点符号前已经使用了对象的名字,当然在参数中不可能再显现了。或者,这么理解,我们用点后面的方法(函数)来作用于点前面的对象上。

如果你是个有心的学习者,那么在学习列表或其他类型时,早已多次使用过点符号,并且,现在用对象的观点看看那些操作,是不是和现在的类一模一样?

今天先到这里,我认为,前面部分解决了大家对类型(类)和对象等的关系后,后面的内容如果仔细看书或者其他资料,应该对类有个基本认识了,要多写代码,自己定义类并且创建对象并使用。

奥,还有一个打印对象的方法问题,就是需要写一个__str__的方法,这个只能在第二部分再说了。希望你不在对类发懵。

欢迎你继续或新关注微信公众号(Mark学编程)或者进入QQ群(Mark学编程),这样就可以得到最新推送的文章,并且能够更好的互动交流。毕竟这个博客只是一般性的阅读,难以互动是不是?当然,我们会持续支持这个社区。

你可能感兴趣的:(教程,对象,类,Python)