面向对象

virous1887 virous1887     2022-12-25     117

关键词:

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

什么是面向对象?

  面向对象就是一种使用‘类‘和‘对象‘进行编程的编程方式.

  类是一个模板,模板里可以包含多个函数,类中定义的这些函数称为方法,对象就是根据模板创建的实例,通过实例对象可以执行类中的方法.

类的定义:

    class 类名:    #定义了一个类
      def 函数名(self)    #在类中创建一个方法
        pass
  类的调用:

      x1 = 类名()      #创建一个对象(实例化)一个对象
      x1.函数名()      #通过对象调用一个方法
class Foo:                          #创建一个类
    def func(self):                 #创建一个类中的方法
        print(‘这是一个类中的方法.‘)
obj = Foo()                         #根据类创建一个叫做obj的对象
obj.func()                          #通过对象去使用方法
结果:
这是一个类中的方法.

  注意:类中的方法的第一个参数必须是self.

面向对象与函数编程的区别:

  面向对象: 创建对象-->通过对象执行方法

  函数编程: 执行函数

  函数编程的应用场景-->各个函数之间是独立的且无共用数据.

  相较于函数编程,面向对象适用于共用数据的编程场景.

面向对象的三大特性: 封装,继承,多态

  封装(将相关功能封装到一个类中,  将数据封装到一个对象中)

  封装就是将内容封装到某个地方,以后再去调用被封装在某处的内容.在使用面向对象的封装特性时,需要: 

  将内容封装到某处

  从某处调用封装的内容

  将内容封装到某处

class Foo:
    def __init__(self, name, age):    #构造方法,根据类创建对象时自动执行
        self.name = name
        self.age = age
obj = Foo(‘ZhangSan‘, 20)             #根据类创建对象并自动执行类的__init__方法

  self是一个形式参数,执行obj = Foo(‘ZhangSan‘, 20)是,self等于obj

  此时,name和age被封装到对象obj中,可以理解为obj对象里面有name = ‘ZhangSan‘和age = 20两个变量.

  从某处调用被封装的内容

  在调用被封装的内容时,有两种情况:

    1.通过对象直接调用

    2.通过self间接调用

  1.通过对象直接调用被封装的内容  

class Foo:
    def __init__(self, name, age):    #构造方法,根据类创建对象时自动执行
        self.name = name
        self.age = age
obj = Foo(‘ZhangSan‘, 20)             #根据类创建对象并自动执行类的__init__方法
print(obj.name)
print(obj.age)
结果:
ZhangSan
20

  2.通过self间接调用被封装的内容

class Foo:
    def __init__(self, name, age):    #构造方法,根据类创建对象时自动执行
        self.name = name
        self.age = age
    def detail(self):
        print(self.name)
        print(self.age)
obj = Foo(‘ZhangSan‘, 20)             #根据类创建对象并自动执行类的__init__方法
obj.detail()
结果:
ZhangSan
20

   将相关功能封装到一个类中.

class Message:
    def email(self):pass
    def msg(self):pass
    def wechat(self):pass

  将数据封装到一个对象中.

class Person:
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

obj = Person(‘张三‘, 18, ‘男‘)
print(obj.name)
print(obj.age)
print(obj.gender)
结果:
张三
18
男

写面向对象的两种小方式

  1.归类+提取公共值

  2.在指定类中编写和当前类相关的所有代码+提取公共值

 1.归类+提取公共值

#归类
class File:
    def file_read(self, file_path):
        pass
    
    def file_update(self, file_path):
        pass
    
    def file_delete(self, file_path):
        pass
    
    def file_add(self, file_path):
        pass
#提取公共值
class File:
    def __init__(self,file_path):
        self.file_path = file_path

    def file_read(self):
        pass

    def file_update(self):
        pass

    def file_delete(self):
        pass

    def file_add(self):
        pass

 2.在指定类中编写和当前类相关的所有代码+提取公共值

class Person:
    def __init__(self, na, gen, age, fig):
        self.name = na
        self.gender = gen
        self.age = age
        self.fight =fig

    def grassland(self):
        self.fight = self.fight - 10

    def practice(self):
        self.fight = self.fight + 90

    def incest(self):
        self.fight = self.fight - 666

  继承

  对面型对象来说,继承就是将多个类共有的方法提取到父类(基类)中,子类(派生类)只需要继承父类而不需要一一实现.

  多继承提高了代码的重用性

class SuperBase:
    def f3(self):    #注意:此处的self仍然是obj
        print(‘f3‘)

class Base(SuperBase):  # 父类,基类
    def f2(self):    #注意:此处的self仍然是obj
        print(‘f2‘)

class Foo(Base):        # 子类,派生类

    def f1(self):    #此处的self为obj
        print(‘f1‘)

obj = Foo()        #创建一个对象
obj.f1()          #使用f1方法
obj.f2()          #自己的类中没有,去Base类中找
obj.f3()          #自己的类中没有,去Base类中找,Base中也没有,去SuperBase类中找
结果:
f1
f2
f3

  继承的原则:先在自己的类中找,没有就去父类中找.(注意:创建的对象不会变,调用这个对象,这个类中的self就一直是这个对象,self不会因为在父类中寻找而变成另外的对象.)

  多继承

class Base1:
    def show(self):
        print(‘Base1.show‘)

class Base2:
    def show(self):
        print(‘Base2.show‘)

class Foo(Base1,Base2):
    pass

obj = Foo()
obj.show()
结果:
Base1.show

  多继承原则:先在自己的类中找,没有就去父类中找,(上面例子中,先到Base1中找,如果Base1中没有就去Base2中找)先从左边(离自己近的)的父类找.

  1,多继承先找左边

  2,self是哪个类的对象,就从哪个类开始找(自己的类中没有就去父类中找)

  多态

  多种形态或多种状态(鸭子模型)

  python原生支持多态,没有特殊性

class Foo1:
    def f1(self):  #这里的self传入的参数可以是str,int,dict,list,tuple,set等数据类型
        pass    

def func(arg):    #这里的arg传入的参数可以是str,int,dict,list,tuple,set等数据类型
    arg.f1()

  这种对于传入参数的数据类型的不确定称为多态(在java等语言中,传入的数据类型是确定的)

面向过程面向对象及面向对象的三大特征

面向过程:procedureorientedprogrammingPOP面向对象:objectorientedprogrammingOOP了解面向对象,我们来了解一下面向对象中的核心概念类和对象类:类是对某一类事物的描述,是抽象的、概念上的定义。对象:现实世界中客观存在的事务就... 查看详情

面向对象与面向过程

一.面向对象与面向过程的区别:二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为。面向对象,将功能封装进对象,强调具备了功能的对象。面向对象更加强调运用人类在日常的思维逻辑中... 查看详情

224面向对象编程介绍,面向过程与面向对象

1.1面向过程面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。1.2面向对象面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。1.3面... 查看详情

面向对象什么是面向对象

面向过程&面向对象面向过程思想步骤清晰简单,第一步做什么,第二步做什么....面向过程适合处理一些较为简单的问题面向对象思想物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行... 查看详情

java面向对象思想1

1.面向对象是面向过程而言.两者都是一种思想。面向过程:强调的是功能行为。(强调过程、动作)面向对象:将功能封装进对象,强调了具备了功能的对象。(强调对象、事物)面向对象是基于面向过程的。将复杂的事情变简... 查看详情

面向对象基础一

什么面向对象 1.面向对象是一种编程方法 2.面向对象是一种思维方式 3.面向对象不是一种编程语言   如何学习面向对象 1.掌握一门面向对象语言的语法 2.掌握面向对想的思维方式 3.熟悉面向对象设计原则 4.掌握面向对象... 查看详情

python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

面向对象:  面向对象(ObjectorientedProgramming,OOP)编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭积木一样简单。  面向对象编程将数据和操作数据相关的... 查看详情

6面向对象之类和对象

1面向对象和面向过程的区别  两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。区别:  1)编程思路不同:面向过程以实现功能的函数开发为主,而面... 查看详情

面向对象思想&封装

面向对象思想介绍:1.面向对象;编程使用的一种编程思路,编程思想。2、面向对象和面向构成比较:都是编程思想,面向过程是面向对象的基础,面向对象是基于面向对象的  面向过程:更强调解决问题的基本步骤,强调问... 查看详情

面向对象

面向对象中的几个概念:一切事物皆对象对象具有封装和继承特性对象与对象之间使用消息通信,各自存在信息隐藏JavaScript语言是通过一种叫做 原型(prototype)的方式来实现面向对象编程的。基于类的面向对象和基于原型... 查看详情

面向对象

面向对象前言:java,c#只支持面向对象,python即支持函数式编程,也支持面向对象编程。一,函数式编程,面向对象编程1###函数式编程2defmail(email,message):3print("去发吧!")4returnTrue56mail("[email protected]","好人")7891011###面向对象:... 查看详情

面向对象

什么是面向对象?  程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。      面向对象:(面向对象是基于面向过程的),是以对象为基础,完成各种操作。强... 查看详情

java面向对象---面向对象

程序的发展历程:面向过程-->面向对象面向过程:不去想怎么做,边做边看面向对象:先想好怎么做,然后再做修饰符(访问权限)访问级别访问控制修饰符同类同包子类不同的包公开public√√√√受保护protected√√√--默认... 查看详情

面向对象

 阅读目录 第一篇: 面向对象初识第二篇: 面向对象命名空间,组合实例第三篇: 面向对象继承第四篇: 继承进阶第五篇: 面向对象封装第六篇: 面向对象进阶 查看详情

面向对象

一。面向对象和面向过程的理解 1.1.面向过程:作为参与者,其实就是面向具体的每一个步骤和过程,把每一个步骤和过程完成。1.2.****面向对象:把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功... 查看详情

面向对象基础

目录面向对象基础面向过程与面向对象编程类面向对象基础静待一树花开,盼你叶落归来面向过程与面向对象编程面向过程编程的核心是‘’过程‘’,过程指的是做事情的步骤,也就是先做什么后做什么,基于该编程思想编写... 查看详情

面向过程与面向对象

1.面向过程(pop)与面向对象(oop)   ¢二者都是一种思想,面向对象是相对于面向过程而言的.面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最... 查看详情

oc-初识面向对象

面向对象和面向过程思想OC是面向对象的,C是面向过程的。面向对象和面向过程只是解决问题的两种不同思想面向对象和面向过程的区别以用电脑听歌为例子面向过程打开电脑 播放电脑中的歌曲 关闭电脑 面向对象(... 查看详情