09 面向对象
作者:互联网
文章目录
一、理解面向对象
面向对象是⼀种抽象化的编程思想,很多编程语言中都有的⼀种思想。
例如:洗衣服
思考:几种途径可以完成洗衣服?
答: 手洗 和 机洗。
手洗:找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗N次 - 拧干 - 晾晒。
机洗:打开洗衣机 - 放衣服 - 加洗衣粉 - 按下开始按钮 - 晾晒。
思考:对比两种洗衣服途径,发现了什么?
答:机洗更简单
思考:机洗,只需要找到⼀台洗衣机,加入简单操作就可以完成洗衣服的工作,不需要关心洗衣机内部发生了什么事情。
总结:面向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。
编程就是设置事物能够做什么事。
二、类和对象
思考:洗衣机洗衣服描述过程中,洗衣机其实就是⼀个事物,即对象,洗衣机对象哪来的呢?
答:洗衣机是由工场工人制作出来。
思考:工厂工人怎么制作出的洗衣机?
答:工人根据设计师设计的功能图纸制作洗衣机。
总结:图纸 → 洗衣机 → 洗衣服。
在面向对象编程过程中,有两个重要组成部分:类 和 对象。
类和对象的关系:用类去创建⼀个对象。
2.1理解类和对象
2.1.1类
类是对⼀系列具有相同特征和行为的事物的统称,是⼀个抽象的概念,不是真实存在的事物。
特征即是属性(变量)
行为即是方法(函数)
类比如是制造洗衣机时要用到的图纸,也就是说类是用来创建对象。
2.1.2对象
对象是类创建出来的真实存在的事物,例如:洗⾐机。
注意:开发中,先有类,再有对象。
2.2面向对象实现方法
2.2.1定义类
Python2中类分为;经典类 和 新式类
语法如下(示例):
class 类名(里面是写要继承类的类名):
代码(大量的属性和方法)
......
2.2.2创建对象
对象又名实例
先有类,再有对象。
先定义类,再创建对象。
语法:
对象名=类名()
代码如下(示例):
#需求:洗衣机,功能:能洗衣服
#1.定义洗衣机类
"""
class 类名()
代码
"""
class Washer():
def wash(self):
print('能洗衣服')
#2.创建对象
#对象名 = 类名()
haier = Washer()
#3.验证成果
#打印haier对象
print(haier)
#使用Wash功能--函数定义在类里面,这样的函数就称之为实例方法(也称之为对象方法)
#实例方法的使用:对象名.Wash[方法名字]()
haier.wash()
......
2.2.3self
self指的是调用该函数的对象。
谁调用了这个函数,那么self指代的就是哪个对象。
代码如下(示例):
# 1. 定义类
class Washer():
def wash(self):
print('我会洗⾐服')
print(self)
#打印(self)的结果:是内存 <__main__.Washer object at 0x0000024BA2B34240>
# 2. 创建对象
haier1 = Washer()
# <__main__.Washer object at 0x0000018B7B224240>
print(haier1)
# haier1对象调⽤实例⽅法
haier1.wash()
haier2 = Washer()
# <__main__.Washer object at 0x0000022005857EF0>
print(haier2)
注意:打印对象和self得到的结果是⼀致的,都是当前对象的内存中存储地址。
2.2.4一个类是否可以创建多个对象
一个类可以创建多个对象。
多个对象如果都调用函数的时候,内存地址不相同,因为不同的对象存储的内存地址是不一样的。
# 1. 一个类可以创建多个对象;
#2. 多个对象都调用函数的时候,self地址是否相同
#创建类
class Washer():
#定义函数
def wash(self):
print('洗衣服')
print(self)
#创建对象1
haier1 = Washer()
#调用函数
haier1.wash()
# <__main__.Washer object at 0x0000022005857EF0>
#洗衣服
#创建对象2
haier2 = Washer()
haier2.wash()
# <__main__.Washer object at 0x0000022005857198>
#洗衣服
三、添加和获取对象属性
属性即是特征,比如:洗衣机的宽度、高度、重量…
对象属性既可以在类外面添加和获取,也能在类里面添加和获取
3.1类外面添加对象属性
语法:
对象名.属性名 = 值
体验:
haier.wighth = 500
haier.height = 800
lass Washer():
def wash(self):
print('洗衣服')
haier1 = Washer()
# 添加属性 对象名.属性名 = 值
haier1.width = 400
haier1.height = 500
3.2类外面获取对象属性
语法:
对象名.属性名
体验:
print(f'洗衣机的宽度是{haier1.width}')
print(f'洗衣机的高度是{haier1.height}')
haier.wighth = 500
haier.height = 800
lass Washer():
def wash(self):
print('洗衣服')
haier1 = Washer()
# 添加属性 对象名.属性名 = 值
haier1.width = 400
haier1.height = 500
# 获取属性 对象名.属性名
print(f'洗衣机的宽度是{haier1.width}')
print(f'洗衣机的高度是{haier1.height}')
#打印结果分别为:
#洗衣机的宽度是400
#洗衣机的高度是500
3.3类里面获取对象属性
语法:
self.属性名
class Washer():
def wash(self):
print('洗衣服')
# 获取实例属性
def print_info(self):
# self.属性名
# print(self.width)
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
haier1 = Washer()
# 添加属性
haier1.width = 400
haier1.height = 500
# 对象调用实例方法
haier1.print_info()
'''
打印结果:
洗衣机的宽度是400
洗衣机的高度是500
'''
四、魔法方法
在Python中,xx() 的函数叫做魔法⽅法,指的是具有特殊功能的函数。
4.1__init__()
4.1.1体验__init__()
思考:洗衣机的宽度高度是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?
答:理应如此。
init() 方法的作用:初始化对象=设置初始化属性值。
# 目标: 定义init魔法方法设置初始化属性 并访问调用
"""
1. 定义类
init魔法方法: width 和 height
添加实例方法:访问实例属性
2. 创建对象
3. 验证成果
调用实例方法
"""
class Washer():
def __init__(self):
# 添加实例属性
self.width = 500
self.height = 800
def print_info(self):
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
haier = Washer()
haier.print_info()
'''
输出结果:
洗衣机的宽度是500
洗衣机的高度是800
'''
注意:
init()方法,在创建⼀个对象时默认被调用,不需要手动调⽤
init(self) 中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
4.1.2带参数的__init__()
思考:⼀个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?
答:传参数。
# 1. 定义类:带参数的init:宽度和高度; 实例方法:调用实例属性
class Washer():
def __init__(self, width, height):
self.width = width
self.height = height
def print_info(self):
print(f'洗衣机的宽度是{self.width}, 洗衣机的高度是{self.height}')
# 2. 创建对象,创建多个对象且属性值不同;调用实例方法
haier1 = Washer(10, 20)
haier1.print_info()
haier2 = Washer(100, 200)
haier2.print_info()
'''
洗衣机的宽度是10, 洗衣机的高度是20
洗衣机的宽度是100, 洗衣机的高度是200
'''
4.2__str__()
当使用print输出对象的时候,默认打印对象的内存地址。
如果类定义了 str 方法,那么就会打印从在这个方法中 return 的数据。
class Washer():
def __init__(self):
self.width = 300
def __str__(self):
return '解释说明:类的说明或对象状态的说明'
haier = Washer()
print(haier)
#解释说明:类的说明或对象状态的说明
4.3 del()
当删除对象时,python解释器也会默认调用 del() 方法。
class Washer():
def __init__(self):
self.width = 300
def __del__(self):
print('对象已经删除')
haier = Washer()
#输出结果:对象已经删除
标签:__,洗衣机,对象,self,09,面向对象,print,Washer 来源: https://blog.csdn.net/pppylppp/article/details/118254474