DAY8 面向对象编程基础

本文介绍了面向对象编程的基础概念,包括类与对象的关系、定义类的方法、创建和使用对象的步骤,以及访问可见性的三种类型。强调了封装的重要性,即隐藏实现细节,仅对外提供简单接口。同时,文中提供了数字时钟和平面上的点作为面向对象编程的练习案例。

#面向对象编程基础

总结: 一切皆可为对象,一切对象都有属性和行为,一切对象都独一无二。

Q : 一些探索到的知识点:
1.(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。
**2.**由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法
**3.**注意:(1)、__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去
**4.**self.name = name的意思就是把外部传来的参数name的值赋值给Student类自己的属性变量self.name
**5.**既然Student类实例本身就拥有这些数据,那么要访问这些数据,就没必要从外面的函数去访问,而可以直接在Student类的内部定义访问数据的函数(方法),这样,就可以把”数据”封装起来。这些封装数据的函数是和Student类本身是关联起来的,称之为类的方法

6、self的仔细用法
(1)、self代表类的实例,而非类。
(2)、self可以不写吗?self在定义时不可以省略。
(3)、在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例。
(4)、在描述符类中,self指的是描述符类的实例
(链接:https://blog.csdn.net/weixin_37887248/article/details/80437270)

一、定义:“把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。”

	**所谓编程就是程序员按照计算机的工作方式控制计算机完成各种任务。**

二、类和对象
简单的说,类是对象的蓝图和模板,而对象是类的实例。这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的东西在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。

三、定义类
在Python中可以使用class关键字定义类,然后在类中通过之前学习过的函数来定义方法,这样就可以将对象的动态特征描述出来

四、创建和使用对象

五、访问可见性问题
Python中访问权限可分为三种,
1.私有 self.__foo 用双下划线表示
2.保护 self._foo 属性公用,但是提醒受保护
3.公用 self.foo 属性公用

     **注意: 在Python中,属性权限并不是严格保证私有属性和方法的私密性,(例如: self._Test__foo时,私有属性和方法可以访问)在实际开发中,我们并不建议将属性设置为私有的,因为这会导致子类无法访问**

六、面向对象的支柱
**面向对象有三大支柱:封装、继承和多态。**后面两个概念在下一个章节中进行详细的说明,这里我们先说一下什么是封装。**我自己对封装的理解是“隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口”。**我们在类中定义的方法其实就是把数据和对数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码,也就是说我们只需要知道方法的名字和传入的参数(方法的外部视图),而不需要知道方法内部的实现细节(方法的内部视图)。

练习:
练习1:定义一个类描述数字时钟(code:digital_clock.py)
练习2:定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。(code:dot_description.py)

解:
1.描述数字时钟

面向对象

时钟属性和状态:

有时针、分针、秒针

时钟行为:

时间每过一秒,秒针就回移动一格,每过60秒时钟秒针
就转一圈。
所在位置表示当前时间的秒位

秒针每转一圈,分针走一格,每过60分钟,分针就转了
一圈
所在位置表示当前时间的分位

分针每转一圈,时钟走五格,五格为一个小时
所在位置表示当前时间的时位

输出状态:
输出当前的时间?
输出为一个走动的电子钟?

问题:
定义一个类描述平面上的点并提供移动点和计算到
另一个点距离的方法

面向对象:

点的属性和状态:

1.在平面坐标系里 : 原点、横坐标、纵坐标

2.点的横坐标、点的纵坐标

点的行为:

1.横移、纵移、横纵移动 横纵移动正负位

2.上下左右移动?!无符号 变换成有符号更简洁

点的到另一个点的距离计算方法:

distant = (横坐标差)**2 + (纵坐标差)**2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值