ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

09 面向对象

2021-07-03 20:00:58  阅读:164  来源: 互联网

标签:__ 洗衣机 对象 self 09 面向对象 print Washer


文章目录


一、理解面向对象

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

例如:洗衣服
思考:几种途径可以完成洗衣服?
答: 手洗 和 机洗。
手洗:找盆 - 放水 - 加洗衣粉 - 浸泡 - 搓洗 - 拧干水 - 倒水 - 漂洗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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有