python面向对象编程:python类和实例讲解

东尧爱分享

这是东尧每天一篇文章的第51天

东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。

1

什么是对象

在python里面,一切皆为对象。也就是说python里的所有数据都是以对象的形式存在的,无论是简单的数字类型 还是复杂的代码模块。

而一般其它编程语言所说的对象其实就是使用特定的语法创建出一种新的复杂数据类型。比如C++中用class关键词 来声明和定义一个类。然后通过类实例化对象。

对象包含数据(变量,一般称之为属性)也包含函数(一般叫做方法)。

在大自然中,我们看到的一切都可以理解为对象。对象是具体化的(这也是为啥通常会说要实例化一个对象)。

理解对象实例化之前先了解另外一个知识点:类(class):

其实每个对象都有自己的分类,就像大自然中的一切事物一样,他们都有自己的分类。比如:青菜,萝卜,西红柿 等我们把它们归类到蔬菜类里面。类是虚拟的,就好像我们说蔬菜的时候,其实蔬菜并不是具体的东西,它代表的 是某一类事物。而我们说青菜,萝卜的时候才是表示是具体的某一种蔬菜(请不要钻牛角尖说青菜也有好多种啥 的,这里只是为了让大家更容易理解类和对象的关系),然后这些青菜和萝卜我们就称之为对象,对象是通过类实 例化出来的(实例化可以理解为类中的某一个具体的东西)。

再举个例子:比如鸟类,鸟类都有一些共同的属性(名字,羽毛,眼睛,脚,翅膀……)和方法(能力)(鸣叫, 飞翔,觅食……)。但是要想表示具体的某一只鸟的时候,比如显式的指明上面的属性(比如叫什么,羽毛是什么 样的,眼睛是什么样的)和方法(叫声是什么样的,能不能飞,能飞多高,吃什么东西等)。这个过程就是叫做实 例化。实例化出来的才是具体的一只鸟(对象)。

面向对象的三大特征:封装、继承、多态

2

类的定义及使用

python中并没有鸟类这种数据类型,那么如果想要实例化一只鸟出来应该怎么做呢?那么就需要使用python的自 定义数据类型来创建。

1. 使用class创建一个鸟类

2. 一个最简单的类

3. 类实例属性

属性其实就是变量,只不过在类中一般称之为属性。类的实例属性是指只有类实例对象才拥有(能访问)的 属性,形式如 self.属性名 其中self表示类实例对象本身,其它语言有的用this表示对象本身。类实例属性一 般是在构造函数(__init__())中创建和初始化的。

类实例化过程:实例化的第一步是创建实例对象,一旦对象创建了,python检查是否实现了__init__()方 法。默认情况下,如果没有定义或覆盖__init__()方法,则对实例不会施加任何特别的操作,实例化过程 完毕。如果程序员实现了__init__()方法,那么就会自动调用__init__()方法,然后进行初始化,实例化过 程完毕。

有参构造和无参构造

· 有参构造:就是构造函数中带有参数(self除外),通过这些参数来给实例属性进行初始化。有参构造需要在类实例化的时候就把对应的参数传递进去。

· 无参构造:就是构造函数中没有除了self之外的参数,实例化的时候不需要传入参数。

4. 类实例方法

方法其实就是函数,在类里面一般称之为方法。类实例方法跟普通函数最大的区别就是它的第一个参数是类 实例对象本身,在对象使用该方法的时候会自动的将自身作为参数传入到方法中,这样在类实例方法中才能 通过类实例调用它的属性已经其它实例方法。

类实例属性和实例方法都是需要通过实例对象才能访问,类名本身是不能访问的。

5. 类属性(静态属性)

直接声明在类下面的属性(属性名前面没有self)叫类属性(也叫静态属性)。

· 类属性只能通过类名进行修改,实例对象不能修改类属性,但是可以访问。

· 同一个类的所有实例对象,共享一个类属性,也就是它们访问出来的值是一样的。

6. 类方法

类方法主要是用来访问和修改类属性的,但是实际的使用却是很少的。类方法的声明与实例方法有一些区 别,除了第一个参数是类本身之外,还需要使用函数装饰器来装饰,表明该方法是类方法。

类和类实例都可以调用类方法,因此类实例可以调用类方法来修改类属性的值,而不需要通过类本身才能修 改了。

7. 静态方法

当某些方法不需要直接访问或修改类的实例属性或方法但是把这个方法又是需要对类实例方法的返回值进行 一些操作才会组成完整的类,而且放在外面的话又不能很好的表达类的功能的时候。就把该函数(方法)放 在类里面,然后使用函数装饰器装饰该方法,使之成为静态方法。

静态方法可以通过类及类实例来访问,但是在静态方法中不能访问类实例属性和实例方法。可以在静态方法 中使用类名来调用类中的其他静态方法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180528G1HB9G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券