其他分享
首页 > 其他分享> > 09 面向对象

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