面向对象编程——比深入交友更深一步

真正的面向对象编程

我们在前面已经和面向对象已经成为了深入交流后的好朋友了,那么我们是不是考虑要把关系更进一步了呢?

真正的面向对象编程

你的面向对象编程

是不是很真实?各位看官。
好了,引入就到这了,咱们今天还是来学习面向对象编程吧,今天是进阶篇,希望大家学会真正的面向对象编程就不愁没对象了。

面向对象高级篇

上次我们介绍面向对象的四大关键字意义及用法,还有类型中的常用魔法方法介绍。接下来我们再再深入了解面向对象的执行过程,还有进行一些简单的案例练习。

创建对象时的执行过程

首先我们需要知道在创建对象的时候会用到哪些方法?
之前我们在深交篇讲过对象创建会调用__new__()方法和__init__()方法,接下来咱们就来看看这个过程是怎样的?
顺序:申请空间–>创建对象–>属性初始化
类名()准备创建对象,申请内存空间–>调用__new__()方法,创建对象–>调用__init__()方法,对象初始化–>将创建好的对象赋值给等号左边的变量
流程图解:
在这里插入图片描述
注意:
在这里插入图片描述

面向对象之封装

封装的定义

封装是面向对象的一个非常重要的特征,主要体现的是对数据的保护。

封装的意义

因为每个对象都有可能存在保密的属性数据,就像生活中每个人都会存在自己的秘密,封装就是为了实现保密功能而存在的。

封装的步骤

①所有属性私有化
私有化,就是让属性编程当前对象自己的,不允许别人(类型、对象外其他类型、对象)直接访问。
属性私有化方法:
约定语法:变量使用一个下划线开头,项目规范中约定了这样的属性在类型和对象的外部不要直接去访问,但是空过对象的引用变量依旧可以访问。
实际语法:变量使用两个下划线开头,这是语法规则上定义的私有属性,在类型和对象的外部不能直接去访问。
在这里插入图片描述
但是这个时候我们会纳闷,如果私有属性访问不了那声明了就没有意义了呀。放心,python没那么笨好吧,往下看就知道了。
②私有属性的访问方法
python推荐了固定的语法规则,用于访问私有属性数据。

方法描述
set_私有属性()给私有属性赋值
get_私有属性()获取私有属性的数据

在这里插入图片描述
需要注意的是:设置的私有变量也需要在初始化方法中声明才行。
set 方法是用来给属性赋值的,init()方法也是给属性赋值的,有什么区别?
init()方法是给属性赋初值的,创建对象的同时初始化对象属性数据的。
set 方法是用来给已有的对象,修改对象属性数据使用的

面向对象之继承

什么是继承

继承是面向对象编程中的一个非常重要的特征,主要体现了类型代码中的复用性。

继承的意义

类型中的继承可以让两个或者多个类型之间产生继承关系,子类可以继承父类的属性和方法,即子类可以调用父类的属性和方法。

继承的语法

class 子类(父类):
 子类中的代码

class Father:
	"""父类"""
	def __init__(self, name, age, gender):
		self.name = name
		self.age = age
		self.gender = gender

	def eat(self):
		print("我会吃饭")

class Son(Father):
	"""子类"""
	pass
	
tom = Son('tom', 18, "男")
print(tom.name, tom.age, tom.gender)
tom.eat()

在这里插入图片描述
可以看到Son类中是没有代码的,tom的属性和方法都来源于Father类型。这就是继承的语法。

子类继承了父类之后可以通过__base__方法访问父类的属性。

print(Son.__base__)

除了继承一个父类,面向对象继承的父类也可以是多个。

class Father:
    """父类"""
    def run(self):
        print("我会奔跑")


class Son(Father):
    def run(self):
        # Father.run(self)
        # super().run()
        print("我还会跳")


class Grandson(Son, Father):
    pass


grandson = Grandson()
grandson.run()
继承之后调用父类的方法

方法一:通过父类名引用父类的方法
在子类中:
父类名.父类方法(self)
self表示子类对象

class Father:
    """父类"""
    def run(self):
        print("我会奔跑")


class Son(Father):
    def run(self):
        Father.run(self)
        print("我还会跳")


son = Son()
son.run()

方法二:通过super().方法()

class Father:
    """父类"""
    def run(self):
        print("我会奔跑")


class Son(Father):
    def run(self):
        # Father.run(self)
        super().run()
        print("我还会跳")


son = Son()
son.run()

方法三:在类的外部调用父类的方法

class Father:
    """父类"""
    def run(self):
        print("我会奔跑")


class Son(Father):
    def run(self):
        # Father.run(self)
        # super().run()
        print("我还会跳")


son = Son()
son.run()
# super(子类, 子类对象).方法名
super(Son, son).run()

面向对象之多态

什么是多态?

多态是程序运行过程中,根据运行时的数据差异,产生笔筒的处理状态,运行不同的逻辑代码的过程。
多态作为面向对象的特征之一,没有固定的语法,主要体现为程序设计时考虑到的各种运行情况,以及运行过程中表现的多种状态的转换。
通俗的讲,多态就是多种状态,程序的体现就是,通过输入不同的代码,可以触发不同的方法。

多态案例演示

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值