Python中的面向对象

一.基本概念:

面向对象:oop:object oriented programming

 

1.过程和函数(都是对一段功能的代码进行封装):

过程:是早期的一个编程概念。过程类似于函数,只能执行,但是没有返回值
函数:不仅能执行,还可以返回结果(return)

 

2.面向过程和面向对象:

面向过程(侧重于怎么做):

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

面向对象(侧重于谁来做):

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

 

3.类和对象:

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

 

4.类的设计:

1)类名:这类事物的名字,满足大驼峰命名法
    大驼峰命名法:每一个单词的首字母大写
            单词与单词之间没有下划线
2)属性:这个类创建出的对象有什么样的特征
3)方法:这个类创建初的对象有什么样的行为
定义只包含方法的类:
class 类名:
    def 方法1(self):
        pass
    def 方法2(self):
        pass

self:哪一个对象调用的方法,self就是哪一个对象的引用
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法是,程序员不需要传递self参数(但是定义时,第一个参数必须是self)
在方法内部:可以通过self,访问对象的属性,调用其他的对象方法
创建对象:对象变量 = 类名()
%x:打印格式为十六进制
用相同的类可以创建不同的对象


二.内置方法:

1.初始化方法:

  使用类名()创建对象的时候,python解释器会自动执行以下操作:
  为对象在内存重分配空间--创建对象;
  调用初始化方法为对象的属性设置初始值--初始化方法__init__
  __init__是python对象的内置方法,__init__方法是专门用来定义以各类具有那些属性和方法的
  在__init__方法的内部使用self.属性名 = 属性的初始值 定义对象的属性,定义后再使用此类创建对象,都会拥有该属性
  在类中,任何方法都可以使用这个self的属性方法

2.__del__:对象被从内存重销毁前,会自动调用

##一般在代码全部执行完以后,系统才会把此对象进行回收

del关键子可以从内存中删除一个对象,del关键字自己调用了__del__关键字
########################
生命周期:
一个对象从调用类名()创建,声明周期开始
一个对象的__del__方法一旦被调用,生命周期就结束
在对象的声明周期内,就可以访问对象的属性,调用对象的方法
########################

3.__str__:返回对象的描述信息,主要用在 print 对象 的时候

默认秦狂下,使用python输出对象变量,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址。在希望用print输出对象变量是,能够打印自定义的内容,就可以利用__str__的内置方法。
##必须返回一个字符串

 

四.私有属性和私有方法:

私有属性,外界不能直接访问
私有方法,外界不能直接调用
定义方法:在定义属性或方法时,在属性名或方法名前面增加两个下划线,定义的就是私有属性或方法

 

五.面向对象的三大特征:

封装:根据职责将属性和方法封装到一个抽象的类中

继承:实现代码的重用,相同的代码不需要重复的写
多态:(以封装和继承为前提,)不同的子类对象调用相同的方法,产生不同的执行结果

1.封装:

将属性和方法封装到一个抽象的类中,外界使用类创建对象,然后让对象调用方法。对象方法的细节都被封装在类的内部。
#初始化方法中可以增加多个参数由外界传递
self.属性 = 形参

被使用的类应该先开发

一个对象的属性可以是另一个类创建的对象
##定义属性的时候,如果不知道设置什么初始值,可以设置成None。None表示什么都没有,表示一个空对象,没有方法和属性,是一个特殊的常量。可以将None赋值给任何一个变量。

 

2.继承:

子类拥有父类的所有属性和方法,子类可以直接享受父类中已经封装好的方法,子类中根据自己的职责封装子类特有的属性和方法。
##########################
另一种叫法:
子类 --- 派生类
父类 --- 基类
继承类 --- 派生
##########################

class 类名(父类):
    def 子类特有的方法

继承有传递性:子类拥有父类的父类的属性和方法。
重写父类的方法:
1)覆盖:如果子类中重写了父类的方法,在运行中只会调用子类中重写的方法而不会调用父类的方法
2)扩展:调用原有在父类中封装的代码,并且可以增加其他的子类代码
公有属性和私有属性:是对象的隐私,不对外公开,外界以及子类都不能直接访问,他们长用做一些内部的事情。
1)子类对象不能在自己的方法内部,直接访问父类的私有属性或调用父类的私有方法。
2)子类对象可以通过父类的共有方法简介访问到私有属性或调用私有方法。

多继承:多继承可以让子类对象,同时具有多个父类的属性和方法
##多个父类的属性和方法名相同时,继承写在前一个父类的属性和方法

新式类和旧式(经典)类:
object是python为所于对象提供的基类,提供有一些内置的属性和方法
新式类:以object为基类的类,推荐使用
经典类:不以object为基类的类,不推荐使用
python2中,如果没有指定的父类,则不会以object作为基类
python3中,如果没有指定父类,则会默认使用object作为基类
新式类和旧式类在多继承是会影响到方法的搜索顺序
##如果没有父类,建议统一继承自object类(即新式类)

 

3.多态:

(以封装和继承为前提,)不同的子类对象调用相同的方法,产生不同的执行结果

 

六.类对象:

一切皆对象,类是一个特殊的对象(类对象),在程序运行时,类对象是创建实例对象的模板,他在内存中只有一份,通过他可以创建出很多个对象实例。
除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法:

1.类属性:

就是给类对象定义的属性,使用赋值语句在class关键字下方可以定义类属性,通常用来记录与这个类相关的特征(与实例对象无关)。通过 类名. 的方式可以直接访问类的属性。

2.类方法:

类方法就是针对类对象定义的方法,在类方法内部就可以直接访问类属性或者调用其他类方法。

静态方法:

在开发的时候,如果需要在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候我们就可以把这个方法封装成静态方法。
通过 类名. 调用了静态方法,不需要创建对象直接就可以使用。

类的结构:

开发时:
1)使用面向对象开发,第一步设计类:
2)使用 类名() 创建对象
   在内存中为对象分配空间
   调用初始化方法__init__为对象初始化
3)对象创建后,内存中就有了一个对象的是是在在的存在————实例
############################
创建出来的对象叫做类的实例
创建对象的动作叫做实例化
对象的属性叫做实例属性
对象调用的方法叫做实例方法
############################

程序执行时:
1)对象各自拥有自己的实例属性
2)调用对象的方法,可以通过self访问自己的属性或是调用自己的方法
##每一个对象都有自己独立的空间,保存各自不同的属性
##多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部

 

七.设计模式:

是前人的总结和经验的提炼,通常被人们广为流传的设计模式都是针对某一个特定问题的成熟解决方案
单例设计模式:
单例:让类创建的对象,在系统中有唯一的实例(唯一的内存地址)
#####################################################
创建对象时:
1)为对象分配空间:__new__
创建对象时,python解释器会首先调用__new方法为对象分配空间。__new__时一个有object基类的内置的静态方法,主要作用时在内存中为对象分配空间和返回对象的引用。
2)对象初始化:__init__
python结束器获得对象的引用后,将引用的第一个参数,传递个__init__方法

每次都会得到第一次被创建对象的引用,初始化方法会被调用多次
#####################################################

若只执行一次初始化工作:
1)定义一个类属性omit_flag白哦及是否执行过初始化动作,初始值为false
2)在__init__方法中,判断init_flag,如果为false就执行初始化动作
3)然后将init_flag设置为True
4)再次调用_init_方法时,初始化动作就不会再次被执行

 

八.异常:

程序在运行的时候,如果python解释器遇到一个错与,会停止程序的执行,并且提示一些错误的信息,这就是异常。
我们在程序开发的时候,很难将所有的特殊情况都处理,如果对某些代码的执行不能确定(程序语法完全正确),可以通过增加try异常捕获可以针对突发时间做集中处理,从而保证程序的健壮性和稳定性。
try:
    不能确定正确执行的代码
except 错误类型1:
    针对错误类型1应的处理
except 错误类型2:
    针对错误类型2对应的处理
except Exception as result:
    针对错误类型2对应的处理(print '未知错误 %s' %result)    
finally:
    无论是否有异常,都会执行的代码

异常的传递:函数的错误会一级一级的去找,最终会将异常传递到主程序里。

#断言assert:可以理解为提前预言,让人更好的知道错误的原因。

 

 

Python面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式。它将数据和操作数据的方法封装在一起,形成对象,通过对象之间的交互来实现程序的功能。 Python面向对象编程主要包括以下几个概念: 1. 类(Class):类是对象的模板,用于定义对象的属性和方法。通过类可以创建多个具有相同属性和方法的对象。 2. 对象(Object):对象是类的实例,具有类定义的属性和方法。通过实例化类可以创建对象。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。可以通过点操作符访问和修改对象的属性。 4. 方法(Method):方法是与对象相关联的函数,用于定义对象的行为。方法可以访问和修改对象的属性。 5. 继承(Inheritance):继承是一种机制,允许一个类继承另一个类的属性和方法。子类可以继承父类的属性和方法,并可以在此基础上进行扩展或修改。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一消息做出不同的响应。通过多态可以实现接口的统一和代码的灵活性。 7. 封装(Encapsulation):封装是一种将数据和操作数据的方法封装在一起的机制,隐藏了对象的内部细节,只暴露必要的接口。 Python面向对象编程可以通过定义类、创建对象、调用对象的方法和访问对象的属性来实现。下面是一个简单的示例: ```python # 定义一个类 class Person: # 初始化方法 def __init__(self, name, age): self.name = name self.age = age # 方法 def say_hello(self): print("Hello, my name is", self.name) # 方法 def get_age(self): return self.age # 创建对象 person = Person("Alice", 25) # 调用对象的方法 person.say_hello() # 访问对象的属性 print("Age:", person.get_age()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值