面向对象(python)

######################################面向对象######################################################
面向对象:
*一个对象的属性可以是另外一个类创建的对象*
(面向对象和面向过程的区别:面向对象就是当你想吃面包时,直接去买了面包,简单;面向过程就是当你想吃面包时,去买了面粉,买了糖,自己开始做,从原始的来做,复杂,但原始。)
面向对象 oop:object oriented programming
面向对象的基本概念
我们之前学习的编程方式就是面向过程的
面向过程和面向对象,是两种不同的编程方式
对比面向过程的特点,可以更好的了解什么是面向对象

过程和函数(都是对一段功能的代码进行封装)
过程:是早期的一个编程概念
    过程类似于函数,只能执行,但是没有返回值
函数:不仅能执行,还可以返回结果(return)
===================================================================
面向过程 和 面向对象 的基本概念

面向过程:---侧重于怎么做?
1.把完成某一个需求的 所有步骤 从头到尾 逐步实现
2.根据开发要求,将某些功能独立的代码封装成一个又一个函数
3.最后完成的代码,就是顺序的调用不同的函数
特点:
1.注重步骤与过程,不注重职责分工
2.如果需求复杂,代码会变得很复杂
3.开发复杂项目,没有固定的套路,开发难度很大

面向对象:--谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
1.在完成某一个需求前,首先确定职责--要做的事(方法)
2.根据职责确定不同的对象,在对象内部封装不同的方法(多个)
3.最后完成代码,就是顺序的让不同的对象调用不同的方法
特点:
1.注重对象和职责,不同的对象承担不同的职责
2.更加适合对复杂的需求变化,是专门应对复杂项目的开发,提供的固定套路
3.需要在面向过程的基础上,再学习一些面向对象的语法


熟悉面向对象编程
python java c++

类:是对一群具有相同特征或行为的事物的一个统称,不能直接使用(比如:飞机制造图纸不能飞上天)
特征:属性
行为:方法
对象:由类创建出来的一个具体的存在,可以直接使用(用图纸制造出来的飞机可以飞上天)

下例中,Person是类,name,age,height为属性,eat,run是方法

               Dog是类,name,color是属性,shout,shake是方法

在程序开发中:应该先有类 再有对象

类的设计
1.类名 这类事物的名字,满足大驼峰命名法
    大驼峰命名法
        每一个单词的首字母大写
        单词与单词只见没有下划线
2.属性 这个类创建出的对象有什么样的特征
3.方法 这个类创建出的对象有什么样的行为

#####
self:
self:哪一个对象调用的方法,self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时,程序员不需要传递self参数(但是定义的时候,第一个参数必须是self)
在方法内部:可以通过self.访问对象的属性
在方法内部:可以通过self.调用其他的对象方法

 

###
初始化方法:
初始化方法:__init__ 是python对象的内置方法
__init__方法是专门用来定义一个类具有哪些属性和方法的
我们现在已经知道了使用 类名() 就可以创建一个对象
当使用类名()创建对象时,python的解释器会自动执行以下操作:
    1.为对象在内存中分配空间--创建对象
    2.调用初始化方法为对象的属性设置初始值--初始化方法(__init__)
这个初始化方法就是__init__方法,__init__是对象的内置方法
__init__方法是专门用来定义一个类具有哪些属性的方法

####
内置方法:
__del__方法:
对象被从内存中销毁前,会自动调用
__str__方法:
返回对象的描述信息 print 对象
__del__方法:
在python中,当一个对象被从内存中销毁前(把这个对象从内存中删除掉),会自动调用__del__方法
应用场景
__del__如果希望在对象被销毁前,再做一些事情,可以考虑一下__del__方法

__str__方法:
在python中,使用python输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了

####
私有属性和私有方法:
应用场景及定义方式
应用场景:
    在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到
    私有属性 就是 对象 不希望公开的 属性
    私有方法 就是 方法 不希望公开的 方法
定义方法:
    在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属性或方法

综合练习实例

 

###################封装######################
封装
*被使用的类应该先开发*
1.封装是面向对象编程的一大特点
2.面向对象编程的第一步 将属性和方法封装到一个抽象的类中(为什么说是抽象的,因为类不能直接使用)
3.外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部

封装例子1:

封装例子2:

封装例子3:

##################继承####################
(1)单继承
继承的概念:子类拥有父类的所有属性和方法
继承的语法
class 类名(父类):
    def 子类特有的方法
(2)重写父类方法
    1.覆盖父类的方法
    2.扩展父类的方法
(3)多继承可以让子类对象,同时具有多个父类的属性和方法
(4)新式类和旧式(经典)类:
*推荐使用新式类*
object是Python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看
新式类:以object为基类的类,推荐使用
经典类:不以object为基类的类,不推荐使用
在python3.X中定义的类时,如果没有指定父类,会默认使用object作为基类--python3.x中定义的类都是新式类
在python2.x中定义类时,如果没有指定父类,则不会以object作为基类
新式类和旧式类在多继承时---会影响到方法的搜索顺序
为保证编写的代码能够同时在python2.x和python3.x运行
今后在定义类时,如果没有父类,建议统一继承自object
 (5)类的私有属性和私有方法:
     1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法
     2.子类对象可以通过父类的公有方法间接访问到私有属性或私有方法
私有属性,私有方法是对象的隐私,不对外公开,外界以及子类都不能直接访问
私有属性,私有方法常用做一些内部的事情

 

#########################多态##########################
面向对象三大特征:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承:实现代码的重用,相同的代码不需要重复的编写
3.多态:(以封装和继承为前提),不同的子类对象调用相同的方法,产生不同的执行结果
人类
work(self):
程序员   设计师

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值