python进阶-----第十八课 --面向对象基础

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂

十八、面向对象

18.1、面向对象简介


> 面向过程:
	> 	面向过程:是一种以过程为中心的编程思想,其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用,达到目的。
	> 	例如用洗衣机洗衣服,面向过程是,先造洗衣机的零件,然后零件拼凑成洗衣机,最后打开洗衣机门,放衣服,然后关门再开始洗衣服。
> 面向对象:
	> 	面向对象:是一种抽象化的编程思想,很多编程语言中都有的一种思想。面向对象就是将编程当成是一个事物(洗衣机),对外界来说,事物(洗衣机)是直接使用的,不用去管他内部(工作原理)的情况。
	> 	还是用洗衣机洗衣服, 面向对象是,放衣服,洗衣服,就没了,不用去管其中的细节,掌握语法,拿起来就用。 
 

18.2、类和对象

类和对象的关系,用类去创建一个对象,用类去实例化对象
类:类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物(类比如是制造洗衣机时候的图纸,也就是说类用来创建对象。特征即是属性(变量),行为即时方法(函数/功能))
对象:对象是创建类创建出来的真实存在的事物。

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

# 定义类:
# 语法:
class 类名():
    代码
    ...

注意:类名要满足标识符命名规则,同时要遵循大驼峰命名习惯。大驼峰命名习惯(首字母大写,其余的小写)

创建对象语法:对象名 = 类名()

注意:创建对象的过程也叫实例化对象。

# 添加和获取对象属性
""""
需求:洗衣服,使用洗衣机,功能:能够洗衣服
1、定义洗衣机类
2、通过类创建对象
3、验证成果
"""""
# 定义类
class Xiyiji():
    def wash(self):  # self :形参
        print("洗衣个服")

# 2、通过类创建对象
haier = Xiyiji()  # 类下创建的对象名 = 类名

# 3、验证成果
haier.wash()  # wash():实例方法/对象方法   ---对象名.wash()
# 结果:
>>> 洗衣个服
# 1、定义类
class Xiyiji():
    def wash(self):  # self :形参
        print("洗衣个服")
        print(self)      # 因为内存地址相同,所以此时此刻的self就是调用self所在的函数的对象
        self.info_print()

    def info_print(self):
        print("能甩干")

# 2、通过类创建对象
haier = Xiyiji()  # 类下创建的对象名 = 类名

# 3、验证成果
haier.wash()  # 实例化
# wash():实例方法/对象方法   ---对象名.wash()
print(haier)

# 结果:
>>> 洗衣个服
>>> <__main__.Xiyiji object at 0x000001F841973D88>  # 无论打印haier还是self内存地址都是一致的
>>> 能甩干
>>> <__main__.Xiyiji object at 0x000001F841973D88>

一个类可以创建多个对象

class Washer():
    def wash(self):
        print(self)

# 通过类创建对象:对象名 = 类名()
haier1 = Washer()
haier2 = Washer()

haier1.wash()
haier2.wash()  # 一个类可以创建多个不同的对象
# 结果:
>>> <__main__.Washer object at 0x0000026D44CA3D88>  # 内存地址不同,所以不是同一个对象
>>> <__main__.Washer object at 0x0000026D44CA3DC8>

18.3、添加和获取对象属性

# 属性既是特征,对象属性既可以在类外面添加和获取,也能在类里面添加和获取
class Washer():
    def wash(self):
        print("洗衣服")

haier1 = Washer()

# 类外面添加性对象属语法(实例化对象)
# 对象名.属性名 = 值
haier1.width = 400
haier1.height = 600

# 获取对象属性:对象名.属性
print(f"海尔洗衣机宽度{haier1.width},高度是{haier1.height}")
# 结果:
>>> 海尔洗衣机宽度400,高度是600

18.4、类里面获取对方属性语法

# 对象名.属性名
class Washer():
    def wash(self):  # self就是调用self所在的函数的对象
        print("洗衣服")
    def info_print(self):
    # 类里面添加对象属性名  # 对象名.属性名
        print(f"海尔洗衣机宽度{self.width},高度是{self.height}")

haier1 = Washer()

haier1.width = 400
haier1.height = 600

haier1.info_print()
# 结果:
>>> 海尔洗衣机宽度400,高度是600

# # # # # 添加和获取类属性

18.5、魔法方法

魔法方法:
	在python中,__xx__()的函数叫做魔法方法,指的是具有特殊功能的函数。
__init__():  # 初始化对象,设置初始化的值 注意: 	 
	 a、在创建一个对象时默认被调用,不需要手动调用
     b、self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去

带参数的__init__():

需求:定义init魔法方法设置初始化属性,并访问调用

# 1、定义类
class Washer():
    def __init__(self):  # 直接调用,不需要做其他操作
        # 设置初始化属性
        self.width = 400
        self.heigit = 600

    # 添加实例方法、访问实例属性
    def print_info(self):
        print(f"洗衣机的宽度是{self.width}高度是{self.heigit}")
# 2、通过类实例化对象
haier = Washer()
# 3、访问调用初始化的属性(展现结果)
haier.print_info()
# 结果
>>> 洗衣机的宽度是400高度是600

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

# 定义类
class Washer():
    def __init__(self, width, height):  # 传参操作
        # 设置初始化属性
        self.kuan = width
        self.gao = height

    # 添加实例方法,访问实例属性
    def print_info(self):
        print(f"洗衣机高是{self.gao}宽是{self.kuan}")
# 通过类实例化对象
haier1 = Washer(400, 500)  # 传参操作
haier2 = Washer(800, 1600)
haier3 = Washer(100, 100)
# 访问调用初始化的属性
haier1.print_info()
haier2.print_info()
haier3.print_info()

# 结果:
>>> 洗衣机高是500宽是400
>>> 洗衣机高是1600宽是800
>>> 洗衣机高是100宽是100

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

class Man():
    def __init__(self):
        self.gao = 170

zhangsan = Man()

print(zhangsan)
# 结果:
>>> <__main__.Man object at 0x0000010A48643D88>
class Man():
    def __init__(self):
        self.gao = 170
    def __str__(self):
        # return后面一般接对对象的说明,或者说对类的说明
        return f"解释说明:张三高{self.gao}cm"

zhangsan = Man()

print(zhangsan)
# 结果:
>>> 解释说明:张三高170cm

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

class Man():
    def __init__(self):
        self.gao = 170

    def __del__(self):  # 清空内存,清空对象使用完了之后所占用的空间
        print("对象已删除")

zhangsan1 = Man()
zhangsan2 = Man()
zhangsan3 = Man()
# 结果
>>> 对象已删除
>>> 对象已删除
>>> 对象已删除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值