Python-面向对象基础


面向对象…难???
太久没更新了,最近又开始更新python,现在是JavaScript和python一起更新,大家抓紧上车!!!

理解面向对象

面向对象是一种抽象化的编程思想,狠多变成语言中都有的一种思想
例如:洗衣服
思考:几种途径可以完成洗衣服?
答:手洗和机洗。
手洗:找盆–防水–加洗衣粉–浸泡–搓洗–拧干水–倒水–漂洗N次–拧干–晾晒。
机洗:打开洗衣机–放衣服–加洗衣粉–按下开始按钮–晾晒。
思考:对比两种洗衣服途径。
答:机洗更简单。
思考:机洗只需要用到一台洗衣机,加入简单操作就可以完成洗衣服的工作,而不需要关心洗衣机内部发生了什么事情。

总结:面向对象就是将变成当成一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。而编程就是设置事物能够做什么事。
事物→洗衣机
编程→设置洗衣机的功能

类和对象

思考:接上篇,洗衣机洗衣服描述过程中,洗衣机其实就是一个事物,即对象,洗衣机对象哪里来的呢?
答:洗衣机是由工厂工人制造出来的。
思考:工厂工人怎么制作出的洗衣机?
答:工人根据设计师设计的功能图纸制作洗衣机。

总结:图纸→洗衣机→洗衣服

在面向编程过程中,有两个重要组成部分:对象
类 相当于是 图纸。
对象 相当于是 洗衣机。
类和对象的关系:用类去创建一个对象。
创建也可以称为实例化。
类去实例化对象。

理解类和对象

类是对一系列具有相同特征行为的事物的统称,是一个抽象的概念,不是真实存在的事物。

  • 特征即是属性(变量,洗衣机的长宽高等参数用变量来储存)
  • 行为即使方法(函数,洗衣机的功能,用函数来表示)

类比如是制造洗衣机时要用到的图纸,也就是说类是用来创建对象

对象

对象是创建出来的真实存在的事物,例如:洗衣机。

注意:在开发中,先有类,再有对象。

面向对象实现方法

定义类

  • 语法
class 类名():
	代码
	......

注意:类名要满足标识符命名规则,同时遵循大驼峰命名习惯

  • 体验

创建对象

对象又名实例。

  • 语法
对象名 = 类名()
  • 体验
# 需求:洗衣机,功能:洗衣服
# 1. 定义洗衣机类

'''
class 类名():
    代码
'''

class Washer():
    def wash(self):
        print('能洗衣服')

# 2. 创建步骤
# 对象名 = 类名()
haier = Washer()

# 3. 验证成果
# 打印haier对象
print(haier) # <__main__.Washer object at 0x0000024DEF6FDC30>
# 打印对象的地址成功,说明创建对象成功

# 使用wash功能 -- 实例方法/对象方法 -- 对象名.wash()
haier.wash() # 能洗衣服

在这里插入图片描述

self

self指的是调用该函数的对象。

# 类:洗衣机 功能:洗衣服

class Washer():
    def wash(self):
        print('洗衣服')
        print(self)

haier = Washer()
print(haier) # <__main__.Washer object at 0x000001ABAFECD1B0>

haier.wash() # <__main__.Washer object at 0x000001ABAFECD1B0>

由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象

一个类创建多个对象

测试:

  1. 一个类可以创建多个对象
  2. 对多个对象调用函数的时候,self地址是否相同
class Washer():
    def wash(self):
        print('洗衣服')
        print(self)

haier1 = Washer()
haier1.wash() # <__main__.Washer object at 0x000001C75C22D1B0>

haier2 = Washer()
haier2.wash() # <__main__.Washer object at 0x000001C75C22DC00>

两次地址不同,说明调用成功

添加和获取对象属性

属性即是特征,比如:洗衣机的宽度、高度、重量…
对象属性既可以在类外面添加和获取,也能在类里添加和获取。

类外面添加对象属性

  • 语法
对象名.属性名 =
  • 体验
class Washer():
    def wash(self):
        print('洗衣服')
haier1 = Washer()
haier1.width = 500
haier1.heiht = 800
print(Washer())

类外面获取对象属性

  • 语法
对象名.属性名
  • 体验
class Washer():
    def wash(self):
        print('洗衣服')

# 添加属性名
haier1 = Washer()
haier1.width = 500
haier1.height = 800

# 获取对象属性
print('haier1洗衣机的宽度为{}'.format(haier1.width))
print('haier1洗衣机的宽度为{}'.format(haier1.height))

类的里面获取对象属性

类的里面是哪里?
???
是这里:
在这里插入图片描述

  • 语法
self.属性名
  • 体验
class Washer():
    def wash(self):
        print('洗衣服')

    # 获取对象属性
    def print_info(self):
        # self.属性名
        print(f'洗衣机的宽度是{self.width}')
        print(f'洗衣机的高度是{self.height}')

# 添加属性名
haier1 = Washer()
haier1.width = 500
haier1.height = 800

# 对象调用实例方法
haier1.print_info() 
'''
洗衣机的宽度是500
洗衣机的高度是800
'''

魔法方法

在python中,__xx__()的函数叫做魔法方法,指的是具有特殊功能的函数。

__init__()

体验__init__()

思考:洗衣机的宽度是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?
答:理应如此。
__init__方法的作用:初始化对象。

# 需求: 定义inti魔法方法设置初始化属性,并访问调用
'''
1. 定义类
    inti 魔法方法: width 和 height
    添加实例方法:访问实例属性
2. 创建对象
3. 验证结果
    调用实例方法
'''
class Washer():
    def __init__(self) -> None:
        # 添加实例属性
        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解释器会自动把当前的对象引用传递过去。

带参数的__init__

思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?
答:传参数。

# 1. 定义类:带参数的init:宽度和高度;实例方法:调用实例属性
class Washer():
    def __init__(self,width,height) :
        # 添加实例属性
        self.width = width
        self.height = height
    
    def print_info(self):
        print(f'洗衣机的宽度是{self.width}')
        print(f'洗衣机的高度是{self.height}')

# 2. 创建对象,创建多个对象属性值不同:调用实例方法
haier1 = Washer(10,20)
haier1.print_info()
'''
洗衣机的宽度是10
洗衣机的高度是20
'''

haier2 = Washer(40,50)
haier2.print_info()
'''
洗衣机的宽度是40
洗衣机的高度是50
'''

注意:如果不传参会报错

TypeError: Washer.__init__() missing 2 required positional arguments: 'width' and 'height'

__str__()

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__()方法,那么就会答应存在这个方法中return的数据

# 1. 定义类
class Washer():
    def __init__(self) :
        # 添加实例属性
        self.width = 300
        self.height = 800
    
    def __str__(self):
        return '这是洗衣机的说明书'

# 2. 创建对象,创建多个对象属性值不同:调用实例方法
haier1 = Washer()
print(haier1) # 这是洗衣机的说明书

__del__()

当删除对象时,python解释器也会默认调用__del__()方法。

# 1. 定义类
class Washer():
    def __init__(self) :
        # 添加实例属性
        self.width = 300
        self.height = 800
    
    def __del__(self):
        print('对象已经删除')

haier = Washer() # 对象已经删除
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溏心蛋*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值