Python系列:面向对象“类”之初认识

举报
数据分析与统计学之美 发表于 2021/09/27 21:50:31 2021/09/27
【摘要】 python系列第十六课

今天就带着大家开始我们——Python学习的第十六课,Python基础之面向对象。
image.png

记住:编写函数就是“面向过程”,编写类就是“面向对象”。关于“类”的相关知识,这也是很早就有朋友问过我的,类也是很多同学的一大学习难点,因此我这里还是准备带着大家学习一下。
在这里插入图片描述

1. 类和对象对比

对象 : 具有行为和属性。在进行描述的时候,属性:多体现为名词。行为: 多体现为动词。

类 : 指的是一个类别。具有相同属性和行为的“对象”构成的一个整体。

类与对象之间的关系:

  • ① 类是对象的抽象表现,对象是类的具体表现。
  • ② 类是设计的蓝图,对象就是该蓝图设计出的具体产物。

2. 类的定义

说了半天:类、类、类,真的有点累,那么Python中是怎么定义类的呢?

class 类名:
	def 方法1():

	def 方法2():
	
	......

	def 方法n():

上述是一个类的基本结构,不知道没关系,先有一个主观印象,我们接着往下面学习。

类中可以定义“属性”和“行为”:

  • 属性:通过定义变量来表示。
  • 行为:通过方法(就是所说的"函数")来表示。

这里还有几点,需要注意的:

  • 注意1 : 其实,方法就是函数。只不过函数,是面向过程的称呼;方法,是面向对象的称呼。
  • 注意2 : 函数,不依赖于一个类的对象。方法,依赖于一个类的对象。

下面定义一个简单的类:

class Person:
    def walk(self):    # self 后面再介绍是什么意思。
        print("走路")
    def run(self):
        print("跑步")

上面这个Person类,还不能做任何事情。我们说了:定义好的类相当于设计蓝图,图纸必须线下生产,才能制造出实物。

线下生产指的就是,用类创建一个对象,也就是我们常说的“实例化”对象。
在这里插入图片描述

3. 实例化对象

如何实例化对象呢?在正式讲述这个知识点之前,我们直接看语法:

# 语法:
类名()

# 对于上述的Person类,如何实例化对象呢?
Person()

脑补一下“汽车图纸” 和 “汽车’之间的关系。
在这里插入图片描述
定义的类,好比是汽车图纸。但是光有图纸不行呀,我们要造汽车,因此需要实例化对象(相当于造车)。

拿到真实的汽车后,我们肯定要去做其他的事儿,比如开车,听音乐,听广播,看视频。实际中,我们可以直接操作车,但是在Python代码中,我们用一个变量,来接受”实例化“对象,它就表示那个汽车。

然后,我们可以拿着这个变量,调用类中的放音乐方法,放视频方法,去实现对应的功能。

class Person:
    def walk(self):    # self 后面再介绍是什么意思。
        print("走路")
    def run(self):
        print("跑步")
        
p = Person()          # 类名 + () : 相当于用类创建了一个对象。

这里先来看一个简单的例子,self不懂可以先不管。这里来讲述一下上述例子:

  • ① 我们定义了一个Person类,类中定义了一个“走路”的方法,还定义了一个“跑步”的方法。
  • ② 下面我们使用Person()实例化了一个“类”对象,相当于造了一个人,此时用变量p去接收,那么你可以将这个p当作是这个人。

在这里插入图片描述

调用类中的方法,实现类中的功能:

直接使用“.”点,可以直接调用类中的方法。

p.walk()

p.run()

结果如下:
在这里插入图片描述

4. 一个类(蓝图)可以创建多个类

上面提到的p,只是类(蓝图)创建出来的一个对象而已,但是这一个类蓝图,肯定不只创建一个对象,我们每实例化一次,就是一个新的对象。

# 再创建p1、p2......pn个对象。
p1 = Person()  
p2 = Person()  
......
pn = Person()  
特别注意:

这些对象之间,既有共同点,也有不同点:

  • 共同点:对于类中的属性和方法,是这些类的公共财产,大家都可以使用;
  • 不同点:对于不同对象新增的属性和方法,属于不同对象的私有财产;

接着,我就为大家讲述”如何动态增加属性和方法“。

5. 为“对象”动态增加属性

我们现在不仅有了一个Person类(蓝图),也有一个类对象p(实物)。此时我们只知道他有一个walk()方法,一个run()方法。如果我们想给p对象增加一个“姓名”,一个“属性”,应该怎么办呢?

这里先讲述如何“动态增加属性”:

# 创建一个类
class Person:
    def walk(self):    # self 后面再介绍是什么意思。
        print("走路")
    def run(self):
        print("跑步")

# 创建一个类对象        
p = Person()  

# 动态增加一个属性和方法
p.name = "张三"
p.age = 10

可以看到,我们还是使用“.”点,直接在新增属性的同时,为新属性赋值。

访问新增属性

新增属性后,我们再使用“.”点,访问各自的新增属性。

p.name,p.age

结果如下:
在这里插入图片描述

新增属性只属于p,其他对象无法访问

上面我们给对象p新增了name和age属性。此时,我们再次新创建一个对象p1,那么它是否可以访问name和age属性呢?

p1 = Person() # 表示又创建了一个新的对象p1。
p1.name,p1.age

p1.walk()
p1.run()

结果如下:
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。