Python面向对象之类和对象


关注【 郑大钱呀】【公】【众】【号】,我们一起交流,一起学习。

对象简述

我们在讲类之前先讲对象,那什么是对象?对象有什么特征?

在Python的世界里,任何一个具体的事物都可以是一个对象,比如:一个铅笔、一台冰箱、一块肥皂、一只黑色猫、一个美女。这里我们一个美女举例,当我们看一个美女的时候会看这个美女的年龄、身高、体重、三围,这些我们就称之为对象的属性,当美女觉得我们都很帅,会向我们抛媚眼、撒娇,这些我们就称之为对象的行为。我们对"对象"总结一下:

  1. 对象可以是人们要进行研究的任何事物,一切事物都可以认为是对象,即万物皆是对象。
  2. 对象具有属性和行为两种特征。
  3. 对象也可以叫实例(instance)。

讲完对象我们再来说类,对具有相同特性和行为的多个对象进行抽象就是类,简单的说类就相当于一个模板,比如现在有一个类叫猫类,我在这个猫类的模板下可以个性化出多个猫类的对象,比如:加菲猫、机器猫,不管我们怎么个性化,最后的个性化出的对象它属于猫类。

类和对象两者是密不可分的,对象的抽象是类,类的具体化就是对象,这时可能有人会问:那是先有类还是先有对象呢?在编程的世界中,对象是基于类创造出来的,所以是先有类后有对象。

类的定义

语法如下:

语法解释:

`class`:该关键字表示你定义的是一个类
`ClassName`:类名,如:Person、Cat,你可以自己定义,但是一定要遵守Python的命名规则,建议使用有含义的英文字母作为类名,且每个单词的首字母大写
`statement`:类中的属性、方法等

示例如下:定义一个简单的类

这里我们定义了一个名叫Person的类,定义了两个属性(age和sex)和一个方法(say),我们定义完成后运行代码是没有任何结果的,下面我们通过:对象名=类名()的方式来实例化一个对象,并调用对象.属性/方法的方式调用类中成员,示例代码如下:

类变量和实例变量

何为类变量、实例变量,从形式上区分两者的区别为:实例变量有self关键字修饰而类变量没有,实例变量对每个实例共享,而类变量被类及该类下的所有实例共享,我们先看一个示例代码:

从上面的代码我们发现,实例对象是写在实例方法中的,使用self关键字修饰,表示这个实例的属性,实例变量在使用前,需要先调用创建(代码中的per.say()),否则会报错,报错如下:

上面我们都是使用实例来调用类变量和实例变量的,说明类变量和实例变量都能被实例调用,但是类对象只能调用类变量,不能调用实例变量,如果使用类对象调用实例变量,我们就会看到如下报错:

构造方法

所谓构造方法可以简单的理解成,初始化,举个例子:比如你玩游戏,你在进入游戏世界之前,总得需要捏个脸,创建一个角色吧,那么这个进入游戏前的准备工作就是构造方法所做的事情,构造方法在你创建对象的时候就已经调用了,不需要你手动的调用。Python中类都需要一个构造方法,如果你没有对构造方法重写,那么系统会默认提供一个无参的构造函数。那么我们如何去定义一个构造方法呢,下面我们看个实例代码:

从上面的代码我们可以看出,我们并没有手动的调用构造方法,我们在创建对象的时候就已经调用了,Python的构造方法名称为__init__(),构造需要一个默认的参数self,表示实例,那么构造方法可不可以传递参数呢,比如我想在对象创建完成的时候就可以有一个名字,示例代码如下(定义一个参数的构造方法):

我们在创建对象的时候,将名字传递给构造方法。

对象方法、类方法、静态方法

在python 的类中一般会出现三种类型的方法,分别是对象方法(也叫实例方法)、类方法、静态方法,下面我们就一起学习三者之间的关联和区别。

实例方法

所谓实例方法,正如字面所言,首先要创建一个实例(也就是对象),然后通过创建的实例去调用实例方法,实例如下:

代码解释如下:我们先创建了一个叫per的实例,然后再通过我们创建的实例去调用实例方法。

我们接下来再看一下实例方法的定义,在上面的实例中,我们定义的是一个无参数的实例方法,但是可能有人会疑惑,这不是有参数self么,你是不是在乱讲。

这里的self代表的类的实例,在定义实例方法时是self必须要有的,虽然在调用时不必传入相应的参数,但是一定要有,没有就不叫实例方法了,下面我们通过代码来验证一下这个self就是表示的实例。

从结果中,我们可以看出,self和实例(per)是同一个对象,表示的就是对象自己。值得注意的是,self不一定要写"self",也可以是其它,比如你写成s,效果也是一样的,但是位置一定要写在第一个参数,不过我们建议还是写"self",示例代码如下:

上面我们定义的都是没有参数的实例方法,下面我们来看一下,有参数的实例方法是如何定义的,示例代码如下:

类方法

类方法就是将类本身作为对象进行操作的方法,与实例方法很相似,他们的定义方式也相似,都有一个self参数,但是这个self参数的含义不同。对于实例方法来说,这个self参数就代表当前实例,可以通过self访问对象中的方法和属性。而类方法的self参数表示类本身。值得注意的是定义类方法的时候,需要@classmethod的装饰器,除此之外还需要知道的是类对象和实例都可以调用类方法,示例代码如下:

从运行结果我们可以看出,有@classmethod修饰的方法,self表示的是类本身,而无@classmethod修饰的是实例方法,表示的是实例对象。

静态方法

所谓静态方法,就是使用@staticmethod修饰的方法,其特点是没有self参数且静态方法体中不能使用类或实例的任何属性和方法,类对象和实例都可以调用类方法,示例代码如下:

对象(实例)方法、类方法、静态方法总结:

  1. 实例方法不需要修饰器修饰,需要self参数,self表示实例对象,实例方法一般由实例对象调用,类对象调用的时候需要手动赋值,否则会报错

  2. 类方法需要@classmethod修饰器修饰,需要self参数,self表示类本身,类方法可以由实例对象和类对象调用

  3. 静态方法需要@staticmethod修饰器修饰,不需要self参数,静态方法可以由实例对象和类对象调用

结尾

本期的内容就到这里,如有不足之处还请大家多多指正,欢迎大家留言、关注、转发、收藏,祝大家身体健康、万事如意。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑大钱呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值