python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)...

年轻人,你渴望力量吗?

你渴望拥有对象吗?

让我们面向对象

重建“家园”吧!

95bb873d43baa3f7530b4c60491fd947.png

一.面向对象的简介

众所周知,python是一门面向对象的编程语言,但是,你知道什么是面向对象吗?

在说面向对象之前,我们先来说一说什么是对象。

之前的博客有简单涉入 一.认识对象

1.对象

通俗的来讲,对象就是内存中用来存储指定数据的一块区域。\color{blue}{通俗的来讲,对象就是内存中用来存储指定数据的一块区域。}通俗的来讲,对象就是内存中用来存储指定数据的一块区域。

(1).对象包含的元素

每个对象中都含有三种数据:id(标识)、type(类型)、value(值)。

①.id(标识)

id是由我们的解析器生成,在我们使用的python(默认cpython)中,id就是对象的内存地址。

我们可以通过比较对象的id来辨别是否是同一个对象。

②.type(类型)

type用来标识当前对象所属的类型,不同的类型决定了对象的不同功能。

python是一门强类型的动态脚本语言,当一个对象被赋值(创建),该对象的类型就已经被确定,且不允许不同类型的相加。

③value(值)

value就是对象中存储的具体数据。

之前博客有写,对象的分类:可变对象和不可变对象,可变对象的值可以更改,而不可变对象则不能。

#对象

def fn():

a = 1

return '奥利给'

print(fn,id(fn),type(fn))

print(fn(),id(fn()),type(fn()))

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第1张图片

当我们对对象有了更基础的认识后,接下来的面向对象就很好理解了。在说面向对象之前我们先 举个栗子:

买冰棍

1.穿鞋

2.下楼

3.到超市

4.选冰棍

5.买冰棍

2.面向对象

简单来讲,我们把问题拆分成各种对象,我们的所有操作都是通过对象来进⾏的。这样一种操作方式,称为面向对象。

⾯向对象关注的是对象,对于以上问题,我们可以用 买冰棍 进行解决。对于怎么买(拆分的思想),后续我们会解决。

(1).面向对象的三大特点

封装

继承

多态

ps:关于这三大特点,我们会在后面的文章进行展开。

3.面向过程

面向过程(Procedure Oriented)是一种以过程为中心的编程思想。

⾯向过程是指将我们的问题分解为⼀个⼀个步骤,通过对每个步骤的抽象来完成解答。

对于上述 买冰棍的过程 ,则是面向过程的编程方式,这种方式易于人们理解。

大家可能会问,为什么要引入面向过程呀,因为,没有对比就没有伤害,哈哈哈嗝。其是就是通过对不同编程思想的比较,进一步加深我们对面向对象的理解,而且还能拓展知识面(面向过程)。是不是真香!

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第2张图片

4.面向对象VS面向过程

⾯向对象的编程⽅式⽐较容易阅读,并且易于维护,容易复⽤。但是编写的过程中不太符合常规的思维,编写相对麻烦。

面向过程的编程思想往往适⽤于单个功能,代码复⽤性⽐较低。如果要实现别的功能,需要更换大量代码,费事,耗时。但是通俗易懂。

之前博客介绍的都是Python的内置对象(列表(list())、字符串(str())、元组(tuple())、字典(dict())等),但是有的时候内置对象并不都能满⾜我们的需求,所以我们在开发中经常要⾃定义⼀些对象,那么也就引申出了 类 。

二.类(class)

1.类的定义

类(Class): 用来描述具有相同属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类和对象都是生活中的抽象。

所有的事物都有两个部分组成:

属性(数据):例如你的身高、体重

方法(行为):例如做家务、上班

2.类的说明

类:简单理解它就是相当于⼀个图纸,在程序中我们需要根据类来创建对象。

类也是对象,是用来创建对象的对象。

对象是类的实例。

如果多个对象是通过一个类创建出来的,我们称这些对象是一类对象。

#类

a = 123

b = '奥利给'

print(a,type(a))

a = int(123) #创建了一个int型的实例

b = str('奥利给') #创建了一个str型的实例

print(b,type(b))

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第3张图片

(1).类的语法

class 类名([父类]):

代码块

举个栗子:

class MyClass():

pass #Python中 pass 是空语句(占位语句),加入是为了保持程序结构的完整性。

(2).类的延伸

class myclass():

pass

print(myclass)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第4张图片

通过这个代码块,我们可以了解,我们创建了一个名为 myclass的类对象 。

class myclass():

pass

print(myclass)

m1 = myclass() #m1是通过myclass创建的,所以m1是myclass的实例

print(m1,type(m1))

#isinstance(),用来检查其中的对象是否是该类的实例

a = isinstance(m1,myclass)

print(a)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第5张图片

我们用 isinstance()函数 来查询我们的对象 m1 ,是否是 myclass 的实例,结果返回True。

类是一个type类型的对象,我们定义类实际上就是定义了一个type类型的对象。

#定义对象

class myclass():

pass

print(id(myclass),type(myclass))

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第6张图片

3.属性和方法

在类的代码块中,我们可以定义变量和函数

变量会成为该类实例的公共属性,所有的该实例都可以通过 对象.属性名的形式访问

函数会成为该类实例的公共⽅法,所有该类实例都可以通过 对象.⽅法名的形式访问

(1).属性

我们目前创建的类对象都是空对象,但是我们可以向对象中添加变量,这个变量我们称之为属性。

语法:对象.属性名 = 属性值

class myclass():

pass

print(id(myclass),type(myclass))

m1 = myclass()

m1.name = '奥利给' #对象m1,属性名name,属性值‘奥利给’

print(m1.name)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第7张图片

在类中的代码块,我们可以定义变量和函数

在类中定义的变量,将会成为所有实例的公共属性。

举个栗子:

#定义一个手机

class Mobile():

a = '华为'

b = 123

p1 = Mobile()

p2 = Mobile()

print(p1,p2)

print(p1.a,p2.b)

这里的 a和b ,是类对象Mobile中的变量,而 p1和p2 ,是类对象Mobile的实例对象,我们通过 p1.a和p2.b 的方式来为实例对象 ==p1和p2添加属性值。

(2).方法

语法:对象.方法名 = 方法值

#定义一个人

class Person():

name = '和尚'

def Speak(): #创建了一个方法Speak

print('奥利给!!!')

p1 = Person()

p2 = Person()

p1.Speak()

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第8张图片

由上述的代码报错提示我们可以看出,方法 Speak() 少了一个参数,当你传入了一个参数后,程序正常运行。

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第9张图片

注意:笔者使用的是python 3.7 的版本。随着python的不断迭代,在创建方法时,会默认自动传递 self 参数,而之前的版本,可能并不能自动传参。

补充:有的小伙伴可能会好奇,我们在创建类的时候,在阅读别人的代码时有的会加小括号 () ,有的则没有加。

#创建类带括号

class Person:

pass

class Person1():

pass

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第10张图片

对于括号而言,其实没有差别。但是如果是有类的继承,则需要加上。

加括号是新的书写形式,建议在进行代码的书写时,加上括号。

(3).函数调用和方法调用的区别

函数调用:一般情况下,形参和实参的数量是对等的。

方法调用:在我们调用方法时,方法至少要有一个形参。

(4).属性(方法)的查找流程

当我们调⽤⼀个对象的属性时,解析器会在当前的对象中寻找是否有该属性,如果有,则直接返回当前的对象的属性值。如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值。如果没有就报错。

举个栗子:

#属性(方法)的查找流程

class Mobile():

a = 123

b = '奥利给'

p1 = Mobile()

p2 = Mobile()

p1.a = 234

print(p1.a,p2.b)

print(p2.c)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第11张图片

类对象和实例对象都可以保存属性(方法),

如果这个属性(方法)是共享的,则应该保存在类对象中;

如果这个属性(方法)是独有的,则应该保存在实例对象中;

一般地,属性保存在实例对象中(独特性),方法保存在类对象中。

三.参数self

在说self的使用之前,我们先看一个代码块。

#在类对象中创建的方法

class Person():

name = '李云龙'

def Speak(n):

print(n)

n1 = Person()

n2 = Person()

n1.name = '张三'

n2.name = '李四'

n1.Speak()

n2.Speak()

print(n1)

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第12张图片

通过之前的讲述,我们了解到:

在类对象中定义方法默认需要传递一个参数。

通过上述代码块,我们了解到,在调用方法时,调用的对象(参数)就是调用者本身。

n1调用方法Speak,调用的对象(参数),就是n1。

1.self的使用

其实 self参数 就相当于上面代码块的 参数n ,只是,我们为了 代码的规范化 ,把方法中传递的参数称作self参数(很形象,传递自己)。

举个栗子:

#self参数

class Person():

name = '李云龙'

def Speak(self):

print('%s的意大利炮'%self.name)

print('{}的意大利炮'.format(self.name))

n1 = Person()

n2 = Person()

n1.name = '张三'

n2.name = '李四'

n1.Speak()

n2.Speak()

python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)..._第13张图片

写到这,这篇博客基本完结,如果想起了什么,我还会继续补充。

笔者感言:其实越往后深入,你会发现,前面的知识用的越来越多,你也就越来越熟练,记忆也越来越深。纸上得来终觉浅,绝知此事要躬行。

本文地址:https://blog.csdn.net/weixin_45095678/article/details/107073246

希望与广大网友互动??

点此进行留言吧!

你可能感兴趣的:(python是一门面向对象的编程语言_python面向对象(面向对象、面向过程、类、参数self)...)