一、理解面向对象

面向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想。

  • ⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。⽽编程就是设置事物能够做什么事。
  • 在⾯向对象编程过程中,有两个重要组成部分:类 和 对象。
  • 类和对象的关系:⽤类去创建⼀个对象。(实例化)

类是对⼀系列具有相同特征和行为的事物的统称,是⼀个抽象的概念。

  • 特征即是属性
  • 行为即是方法

类是⼀个抽象的概念,不是真实存在的事物,对象是类创建出来的真实存在的事物

二、面向对象实现方法

1、定义类:
2、创建对象:创建对象的过程也叫实例化对象。

# 定义people类
class People():def person(self):  # 定义实例方法print("person startup")
# 创建对象
p1 = People()
# 验证
print(p1) # 打印对象
p1.person() #调用对象方法--对象.方法名()输出:
<__main__.People object at 0x000001C54AE88288>
person startup

3、self指的是调用该方法的对象。

class People():  #定义类def person(self):print("i am People class")print(self)
p1 = People()  # 创建对象
print(p1)
print("-"*40)
p1.person() #对象调用方法输出:
<__main__.People object at 0x0000026422AF8308>
----------------------------------------
i am People class
<__main__.People object at 0x0000026422AF8308>  #self的内存地址与对象p1的内存地址相同,所以self是调用该函数的对象

4、一个类创建多个对象

  • 一个类可以创建任意多个对象
  • 每个对象是不同的对象,内存地址不同
# 需求:1,一个类创建多个对象,2,多个对象都调用函数的时候,self地址是否相同
class People():def person(self):print("i am coming")print(self)p1 = People()
p1.person()p2 = People()
p2.person()输出:
i am coming
<__main__.People object at 0x0000026C3D1E8288>
i am coming
<__main__.People object at 0x0000026C3D1EFE88>

5、添加对象属性
属性即是特征,对象属性既可以在类外⾯添加和获取,也能在类⾥面添加和获取。
5.1、在类外面添加属性

5.2、在类外面访问对象属性

class People():def person(self):print("i am coming")p1 = People()
p1.height = 180
p1.weight = 170
print("p1的身高是{}cm,体重是{}斤。".format(p1.height, p1.weight))输出:p1的身高是180cm,体重是170斤。

5.3、在类里面访问对象属性
里面:即class缩进的位置

class People():def person(self):print("i am coming")def print_info(self):print("p1的身高是{}cm,体重是{}斤。".format(self.height, self.weight))p1 = People()
p1.height = 180
p1.weight = 170p1.print_info()输出:p1的身高是180cm,体重是170斤。

5.4 在类里面调用类方法

语法:self.方法名()

class People:def person(self):return "i am coming."def info(self):return "hi,"def personinfo(self):print(self.info(), self.person())p1 = People()
p1.personinfo()输出:
hi, i am coming

6、魔法方法:init()方法
在Python中, xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。
思考:对象的宽度高度是与生俱来的属性,可不可以在创建过程中就赋予这些属性呢?
答:理应如此。
init() 方法的作用:初始化对象。

  • init() 方法,在创建一个对象时默认被调用,不需要⼿动调用
  • init(self) 中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
class People():  # 定义类def __init__(self):  # 定义init方法,初始化功能self.height = 180  # 添加实例属性self.weight = 170def print_info(self):  # 定义实例方法print("身高是{}cm,体重是{}".format(self.height, self.weight))  # 在类里面访问实例属性p1 = People()
p1.print_info()输出:身高是180cm,体重是170

7、带参数的__init__()
思考:一个类创建多个对象,且不同的对象设置不同的初始化属性呢?
答:传参数。

class People():def __init__(self, height, weight):  # 定义init方法,初始化实例属性,方法里有两个形参,height形参,weight形参self.height = height  # self.height是实例的属性,height是形参self.weight = weight  # self.weight是实例的属性,weight是形参def print_info(self):  #定义实例方法print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))# 此处的self.height是实例的属性,self.weight是实例的属性p1 = People(180, 170)  # 创建实例时传入实参
p1.print_info()  # 调用实例方法p2 = People(165, 100)
p2.print_info()输出:
身高是180cm,体重是170斤。
身高是165cm,体重是100斤。

如果创建实例时不传参,报错:

8、魔法方法之__str__()

  • 当使⽤print打印对象名不加括号的时候,默认打印对象的内存地址。
  • 如果类定义了 str 方法,那么就会打印这个方法中 return 的数据。
  • str()方法一般放的是解释说明的文字
  • 注意:str()方法,用return关键字,后面写要返回的内容,调用时用print
class People():def __init__(self, height, weight):  # 定义init方法,初始化属性,方法里有两个形参self.height = height  # self.height是实例的属性,height是形参self.weight = weight  # self.weight是实例的属性,weight是形参def print_info(self):  #定义实例方法print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))# 此处的self.height是实例的属性,self.weight是实例的属性p1 = People(180, 170)  # 创建实例时传入实参
print(p1)输出:<__main__.People object at 0x0000020D3888FE88># 当使⽤print打印对象名不加括号的时候,默认打印对象的内存地址。
class People():def __init__(self, height, weight):  # 定义init方法,初始化属性,方法里有两个形参self.height = height  # self.height是实例的属性,height是形参self.weight = weight  # self.weight是实例的属性,weight是形参def print_info(self):  #定义实例方法print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))# 此处的self.height是实例的属性,self.weight是实例的属性def __str__(self):return "这是__str__方法解释说明文字,类的说明,对象状态说明"p1 = People(180, 170)  # 创建实例时传入实参
print(p1)输出:这是__str__方法解释说明文字,类的说明,对象状态说明

9、魔法方法之__del__()

  • 当删除对象时,python解释器也会默认调用 del() 方法。
  • 当没有手动删除对象时,只要程序自上而下运行结束会自动调用__del__方法,内存删除程序运行时的变量、类、对象等,释放内存
class People():def __init__(self):self.width = 300def __del__(self):print("was deleted!")p1 = People()输出:was deleted!

三、基础总结

思考参与这个需求的事物一共有哪些,划分出事物之后,对事物进行上归类,分出来多少个分类,就创建多少个类,再用类去创建对象。



魔法方法都不需要手工调用,当程序满足条件自动调用。

PS: source, bilibili

Python OOP:面向对象基础,定义类,创建对象/实例,self,创建多个对象,添加对象属性,访问对象属性,__init__方法,带参数的__init__,__str__方法,__del__方法相关推荐

  1. Python面向对象基础示例_创建对象

    Python面向对象基础示例_创建对象 python是面向对象的语言,你可以很轻松的创建一个类和对象.本书代码源自<<Python 3 Object-Oriented Programmin ...

  2. Python面向对象-概念、类、实例

    Python面向对象-概念.类.实例 OOP--Object Oriented Programming,面向对象编程,是一种程序设计思想.该思想将对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  3. 十三 Python之面向对象基础

    ⼀. 理解⾯向对象 ⾯向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想. 例如:洗⾐服 思考:⼏种途径可以完成洗⾐服? 答: ⼿洗 和 机洗. ⼿洗:找盆 - 放⽔ - 加洗⾐粉 - 浸泡 ...

  4. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  5. python 中三种定义类的方式

    在Python中方,有三种定义类的方法: 常规方式.@classmethod修饰方式.@staticmethod修饰方式 class类定义 In [1]: class A:...: def commo ...

  6. python里的class定义类为什么括号有object

    很多同学有疑问,为什么python里的class定义类括号有object 当我在python编辑器里输入object后,然后按住ctrl键+鼠标左键 即可查看object里的方法 class obje ...

  7. python get方法列表参数_python中requests库get方法带参数请求

    起因是想爬五等分的花嫁的漫画.这是其中的一个坑 先上代码 data={ 'cid':567464, 'page':, 'key':'', 'language':1, 'gtk':6, '_cid':5 ...

  8. python类的定义和使用_Python3基础之python 之 面向对象基础(定义类、创|python基础教程|python入门|python教程...

    第七章面向对象 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流 ...

  9. python面向对象图片_Python面向对象-概念、类、实例

    OOP--Object Oriented Programming,面向对象编程,是一种程序设计思想.该思想将对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 区别于面向过程的程序设计即把计 ...

最新文章

  1. golang库context学习
  2. 基于聚类的图像分割-Python
  3. LeetCode-笔记-199. 二叉树的右视图——BFS广度优先搜索
  4. ACTIVEMQ 发布与订阅
  5. SDMemoryCache中的NSMapTable
  6. 一张PDF了解JDK9 GC调优秘籍-附PDF下载
  7. java中Date,SimpleDateFormat
  8. Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)
  9. 将博客文章转变为电子书
  10. 利用MSFM算法计算程函方程的走时CT胖射线反演法
  11. 人生苦短,喝点python性能鸡汤
  12. 使用QXmlStreamReader读取解析XML文件
  13. java 铁三车强度如何_骑行入门:铁三车与TT车,傻傻分不清楚?
  14. 深度学习计算模型中“门函数(Gating Function)”的作用
  15. android 英语单词音标获取
  16. 2021年安全员-C证考试题库及安全员-C证考试资料
  17. 经典编程题目-古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子
  18. 直播预约 | 如何通过MLOps解放和提升AI生产力?
  19. 趣闲赚~~~~~~青龙脚本
  20. 有一个班4个学生,5门课程①求第1门课程的平均分;②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生分别编3个函数实

热门文章

  1. MongoDB入门系列(二):Insert、Update、Delete、Drop
  2. 指令数据采集(五)--指令的条件的执行判断
  3. 17110 Divisible(basic)
  4. 理解矩阵,矩阵背后的现实意义 [转]
  5. hdu 3093 动态规划
  6. Block Formatting Contexts(块级格式化上下文)
  7. 数字化转型方法论_50+企业数字化转型、管理的方法论,这本书到底有什么干货?...
  8. l2-029 特立独行的幸福 (25分)_霜降后盆栽幸福树,调整4个地方,不用再怕掉叶子了...
  9. ctreectrl 设置选中_CTreeCtrl点击获得选中项
  10. java中读取logback日志文件_java 中使用logback日志,并实现日志按天分类压缩保存。...