参考链接: Python中的面向对象编程OOP | 3(继承,对象示例,issubclass和super)

0.前言

  这篇博文将讲述Python面向对象开发中的类与对象的概念,包括对类和对象的理解,类和对象的关系以及类和对象的创建。

加深对封装概念的理解:01_Python3中对封装的认识

1.类和对象的概念

1.1类和对象的概念   类(Class)是对一群具有相同特征或者行为的事物的一个统称,特征被称为是属性,行为被称为方法。类是抽象的,不能直接使用。   对象:是由类创建出来的一个具体的存在,可以直接使用,由哪一个类创建出来的对象,就拥有在哪一个类中的定义的属性和方法。

1.2类和对象的关系

1.类是模板,对象时根据类这个模板创建出来的。2.在程序开发中,应先有类,再有对象。3.类只有一个,对象可以有很多,不同的对象之间可以有不同的属性。4.类中定义了什么属性和方法,对象也可以拥有这些属性和方法。

  类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的。对象就相当于用图纸制造的飞机,是一个具体的事物。

1.3类的设计   进行程序设计之前,首先抽象分析程序需要包含哪些类,用名词提炼法抽象出类名,再分析类中应该包含哪些属性和方法。 程序开发中需要考虑三点:

①类名:这类事物的名字,应用驼峰命名法。  ②属性:这类事物具有什么样的特征。   ③方法:这类事物具有什么样的行为。  类名的确定:名词提炼法,能对一类事物概括的名词。如:动物、植物等。  属性的确定:对对象特征的描述,如人的名字、年龄、性别等。  方法的确定:对象具有的行为(动词),如人会说话、吃饭、睡觉等行为。

看第一个实例:

1.Cain今年18岁,身高175,爱跑步。 2.Cary今年17岁,身高172,爱看书。

抽象分析: 类——人类 属性——名字,年龄,身高 方法——跑步,看书 程序如下:

# 创建人类

# 创建人类

class Person:

# 创建属性

def __init__(self, new_name, new_age, new_height):

self.name = new_name

self.height = new_height

self.age = new_age

print("我叫%s,今年%d岁,身高是:%d" % (self.name, self.age, self.height))

# 创建方法

def run(self):

print("我爱跑步!")

def read(self):

print("我爱看书!")

# 创建Cain对象

Cain = Person('Cain', 18, 175)

Cain.run()

# 创建Cary对象

Cary = Person('Cary', 17, 172)

Cary.read()

运行结果: 我叫Cain,今年18岁,身高是:175 我爱跑步! 我叫Cary,今年17岁,身高是:172 我爱看书!

注意:

格式要求:类和函数体一样,需要与其他代码有两行的间距,每个方法之间也应该有一行的间距,体现Python语言的特色。程序分析:这个程序首先创建了一个人类“Person”,在这个类中创建了“名字”、“年龄”、“身高”等三个属性和“跑步”、“看书”等两个方法。后面创建了两个“人”对象“Cain”和“Cary”,创建对象时,需要传入相应的三个属性,创建好的对象可以调用类中的方法。以上Cain对象调用的方法是跑步,Cary调用的方法是看书,当然Cain也可以调用看书,Cary同样也可以跑步。 这个过程和函数调用、模块调用的过程很像,道理是相通的,这个程序看不懂没关系,看后面的分步解析。

2.内置函数方法

介绍几种常用的类的内置方法

方法名作用__new__创建对象时,会被自动调用__init__对象被初始化时,会被自动调用__del__对象被从内存中销毁前,会被自动调用__str__返回对象的描述信息,print函数输出使用

可以用dir()方法来查看一个对象有哪些内置函数方法。 可以用id()方法来查看对象的存储地址。

2.1对象属性的初始化方法__init__

使用背景:当使用类名创建对象时,会自动执行以下操作:

1.为对象在内存中分配空间–创建对象2.为对象的属性设置初始值–初始化方法__init__

应用说明:

对象的属性初始化,可以在类的内部完成,也可以在类的外部完成(不推荐,有bug)__init__方法是专门用来定义一个类具有哪些属性和方法。不需要调用,会自动调用初始化方法。在__init__方法内部使用self.属性名 = 属性的初始值 就可以定义初始属性,在定义属性之后,再用这个类创建的对象就都会有该属性。

来看一个例子:

class Person:

def __init__(self):

# self.属性名 = 属性的初始值

self.name = 'Cain'

print("我叫%s" % self.name)

# 创建Cain对象

Cain = Person()

Cary = Person()

运行结果: 我叫Cain 我叫Cain

注意:   在类的内部的初始化方法中设置了对象的初始属性,用Person()类创建的对象都会有这个初始属性。

  上面的初始值是固定的,实际开发的时候要根据需求传入属性,所以在初始化方法中应该设置形参来传入初始值。

改进代码如下:

# 创建人类

class Person:

def __init__(self,name):

self.name = name

print("我叫%s" % self.name)

# 创建Cain对象

Cain = Person('Cain')

Cary = Person('Cary')

运行结果: 我叫Cain 我叫Cary

说明:   和构造函数类似,需要用形参来代替实际参数,让代码变得更加灵活。以上代码,就是在__init__方法的参数列表加入了name这个形参,再用赋值语句self.name = name 来将传入的参数赋值给初始化属性name,这样类的初始属性就是创建对象时传入的参数了,以此类推,当一个类具有多个属性时,创建对象时,也需要传入多个属性,属性与属性之间用逗号隔开。

2.2__del__方法

使用背景:   当一个对象在内存中被销毁之前,会自动调用__del__方法来销毁对象 对象的生命周期:

创建对象,生命周期开始生命周期内,可以访问对象的属性,或让对象调用方法调用__del__方法,生命周期结束

看一个例子:

class Person:

def __init__(self,name):

self.name = name

print("我叫%s,我来啦!" % self.name)

def __del__(self):

print("我叫%s,我走啦!" % self.name)

# 创建Cain对象

Cain = Person('Cain')

print('-' * 50)

运行结果: 我叫Cain,我来啦! -------------------------------------------------- 我叫Cain,我走啦!

注意:   从以上程序可以看出,解释器在完成所有程序后,会自动调用__del__函数将对象从内存中“咔嚓”掉,所以再执行完print()语句后再执行的__del__()方法。   举个例子,你出门前需要整理仪表,料理一下卫生或者其他的事,一切搞定后,需要走出家门,并关门。在这个过程中,你在家里的时候做的一系列动作,相当于代码正常运行,当你走出去时,就算是程序结束,此时就会执行__del__方法进行关门。   感觉我是强行举例了,哈哈,这个不重要,重要的是要理解这个过程,在对象消失之前,解释会自动调用__del__函数释放对象所占的空间,如果希望对象在消失之间再做一些事情,可以在__del__方法中添加这些要做的事情,比如上面的程序,离开的时候说我走了。

  另外一种情况就是用del方法直接删除对象,这个类的__del__方法就会提前执行,修改一下上面的代码看看效果。

# 创建人类

class Person:

def __init__(self,name):

self.name = name

print("我叫%s,我来啦!" % self.name)

def __del__(self):

print("我叫%s,我走啦!" % self.name)

# 创建Cain对象

Cain = Person('Cain')

del Cain

print('-' * 50)

运行结果: 我叫Cain,我来啦! 我叫Cain,我走啦! --------------------------------------------------

说明:   程序提前结束了(del)对象的生命周期,对象的所占的内存提前释放了,所以类中的__del__方法也提前执行了,通过这个例子应该对__del__方法的理解更加深刻了吧。

2.3__str__方法

使用背景:   如果希望用print()输出对象变量时,能够打印自定义的内容,就需要用到__str__这个方法了,需要注意的是__str__方法返还值必须是一个字符串。 不好理解话,就看例子吧:

class Person:

def __init__(self, name):

self.name = name

"""

def __str__(self):

return ("我是一个名为:%s的人类" % self.name)

"""

# 创建Cain对象

Cain = Person('Cain')

print(Cain)

加上多行注释运行结果: <__main__.Person object at 0x000002248C561390>

不加多行注释运行结果: 我是一个名为:Cain的人类

说明:   不用__str__方法直接用print()打印对象的话,输出的是对象的存储地址,如果加上__str__方法的话,用print()打印对象的结果就是我们自定义字符串了。

时间:2019年5月2日21:43:10

[转载] Python3基础:08_02_面向对象编程(OOP)——类和对象相关推荐

  1. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  2. ES6学习笔记(一):轻松搞懂面向对象编程、类和对象

    文章目录 面向过程编程P OP(Process oriented programming) 面向对象编程OOP(Object Oriented Programming) ES6中的类和对象 面向对象 ...

  3. 用《叩响C#之门》复习C#基础知识 第八章 面向对象编程:类和对象(二)

    1.以对象为成员 类的成员不光可以是int.double等基本类型的变量,也可以是其他类的对象.其实也就是说,类的成员可以是所有的值类型和引用类型的成员变量. 2.静态成员 1)静态变量:描述类的整体 ...

  4. 【Python】Python语言学习:面向对象编程,类和对象,封装、继承和多态

    这一周Python语言学习,记录如下. 01 面向对象编OOP 1.1 为什么学习和应用OOP? 1 OOP适合更加复杂的需求分析和项目开发. 2 OOP具有更强大的封装能力. 3 OOP相比于面向过 ...

  5. python进阶《面向对象编程》类和对象

    目录 零.前言 一.面向对象编程 (一)概念理解 二.类和对象的概念 (一)面向对象的两个重要概念类和对象. (二)类的解释   1.创建类   2.类属性(区别于下面的对象属性) (三)对象的解释 ...

  6. 初学者python笔记(面向对象编程、类与对象)

    文章目录 面向对象设计 类与对象的概念 1.类与对象的本质 2.面向对象设计 到 面向对象编程 3.类实例化 4.例如一个学校类 面向对象编程 1.案例 2.面向对象语言和面向对象编程之间的关系 3. ...

  7. day16 初识面向对象编程(类与对象、构造函数与对象,类与类)

    目录 一.面向对象和面向过程的区别 二.类与对象的概念 三.构造函数和对象的关系 三.类与类的关系:组合 四.类与类的关系:依赖 一.面向对象和面向过程的区别 面向过程:强调过程步骤 面向对象:强调对 ...

  8. Kotlin系列二:面向对象编程(类与对象)

    目录 一  类与对象 二 延迟初始化属性与变量 三 继承 四 构造函数 4.1 主构造函数 4.2 次构造函数. 五 接口 六 数据类与单例类 6.1 数据类 6.2 单例类 七 密封类 八 嵌套类与 ...

  9. python oop编程_23 Python - 面向对象编程OOP

    面向对象编程OOP 01 方法__repr__()和__str__() __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试 _ ...

最新文章

  1. Java从基础进阶到高手
  2. 驰骋工作流引擎设计系列10时效考核规则设计
  3. Java加密算法 AES
  4. 互联网1分钟 |1214
  5. artTemplate的使用总结
  6. 7、ABPZero系列教程之拼多多卖家工具 修改注册功能
  7. ArcGIS中国工具(ArcGISCTools)3.2 安装教程(附安装包下载)
  8. Exynos4412裸机开发——中断处理
  9. python进程socket通信_python实现多进程通信实例分析
  10. netpref 使用_使用PrefView监测.NET程序性能(一):Event Trace for Windows
  11. SSAS实践问题记录--后端数据库访问模块中存在错误。 为绑定指定的大小太小,导致一个或多个列值被截断。
  12. PWM波、方波的输出与捕获
  13. 区块链入门(一)------ 区块链简介(持续更新)
  14. 阅读器安装三方APK指导
  15. UI常见面试题-整体素养篇
  16. 操作系统安装磁盘清理方法
  17. unity reflect_Unity Reflect在这里
  18. 我们公司没销售 - 疫情下企业软件的互联网营销
  19. 腾讯视频转换mp4格式用什么转换器?电脑怎么把腾讯视频转换成mp4?
  20. 物联网笔记,基于华为云IOT

热门文章

  1. 【图论】二分图学习笔记
  2. Win10 独立音量调整
  3. 显示服务器运行时间,查看服务器运行时间
  4. JavaScript变量、属性、函数、方法的区别(1)
  5. java模拟多个用户操作,JAVA 模拟多用户提交动作
  6. TCP和UDP协议的特点和区别详解
  7. n皇后问题(在棋盘上找方案)
  8. Unity3D基础26:物体实例化
  9. bzoj 1045: [HAOI2008]糖果传递
  10. matlab空域内图像增强之灰度变换增强