带你重新认识python面向对象(一)

一.面向对象概念理解

1.1面向对象

       •面向对象的编程(OOP,Object Oriented Programming)
       •早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。面向对象由此诞生用来解决那些使用面向过程很复杂的问题

1.2面向对象之重点

       •对象:一切皆对象
       •对象就是内存中存储指定数据的一块区域
       •实际上对象就是一个容器,专门用来存一类具有相同特征但又各有特点数据
       •程序运行的通俗解释:
       •代码存在硬盘,CPU处理代码,CPU和硬盘之间有内存,解释器将代码交给内存,CPU再从内存读取(详细过程在此我们不深究)

1.3面向对象的结构

id(标识)

       •作用:用来标识对象的唯一性,每个对象都有唯一的id,每个id指向一个内存地址值,即id是对象在内存的标识
       •id由解释器生成,其实就是对象的内存地址

type(类型)

       •类型决定了该对象所具有的功能(确定该对象是哪一个类的实例对象),确定完成后即可使用该类中定义的属性与方法
       •可使用type()函数来查看该对象的类型

value(值)

   •值就是对象中存储的具体数据数据结构,分为:
   •不同对象可使用不同的数据结构,以提高效率
       •可变对象:
       •列表list、集合set、字典dict
       •不可变对象:
       •数值类型int、float,字符串str,元组tuple,布尔型bool

1.4从面向过程到面向对象

所谓面向对象,简单理解就是语言中所有的操作都是通过对象来进行的
面向对象和面向过程都是编程解决问题的重要思想各有优缺点
面向过程 → 面向对象:
面向过程的典型代表是C语言,是早期语言的特点,用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

面向对象即将所需要解决的问题定义成一个整体,将一部分问题取出分部分解决
       •对面向对象的理解:
              1.可以让复杂事务变得简单化,人由执行者过渡到指挥者
              2.具备封装、继承和多态三大特性

实例区别两种思想

以前总有人问你的一个问题:把大象关进冰箱需要几步
       •面向过程:
       (1)打开冰箱
       (2)放入冰箱
       (3)关闭冰箱
即上述所有动作都需要我们执行,自己亲自动手,当我们需要将大象放到其他地方时,你自己又需要执行其他动作。操作麻烦
这是一个典型的面向过程的例子,在现实中没问题,但是在程序中会出现问题,在复用、修改时会出现很多问题
       •面向对象:
       •面向对象的重点就是将大象放入冰箱,不需要知道具体咋实现,实现细节都在对象内部
面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了

两种编程思想的优缺点

       •面向过程:
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

       •面向对象:
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差

二.类(class)的简介

       •在没学习面向对象之前,我们所用到的对象都是Python内置的对象
       •同样在编程世界里,其实我们从第一天开始就在接触类(class),比如整数、字符串、浮点数等,不同的数据类型就属于不同的类
       •类简单理解就是一张图纸,在程序中我们需要根据类来创建对象

print(type('1')) # '1'属于字符串类'str'
print(type(1))  # 1属于整数类'int'
print(type([1])) # [1]属于列表类'list'

2.1实例

       •在Python的术语里,我们把类的个例就叫做实例 (instance),可理解为“实际的例子”
       •至此,我们已经认识了两个重要的新概念:类和实例,也知道它们之间的关系类似于:群体和个体。群体里的每个个体都有着相同/相似的特征和行为

2.2自定义类

       •自己定义类时,类名要以大写开头
语法结构:

class 类名([父类])#类名大写开头
    代码块

eg:

class Dog(object):
    pass


print(Dog)

打印结果为:<class ‘__ main __.Dog’>
创建实例:

class Dog(object):
    pass

# 创建Dog的实例对象,(秋田)pembroke时Dog的实例对象
pembroke = Dog()
print(pembroke, type(pembroke))

打印结果:<__ main __.Dog object at 0x0000017ADB6D8348> <class ‘__main __.Dog’>
解释理解: Pembroke是Dog的对象 内存中的地址为0x0000017ADB6D8348 type()方法只显示谁是谁的实例,不显示在内存的地址

isinstance()方法

       •isinstance() 函数来判断一个对象是否是一个已知的类型
       •isinstance() 与 type() 区别:
              type() 不会认为子类是一种父类类型,不考虑继承关系
              isinstance() 会认为子类是一种父类类型,考虑继承关系
              如果要判断两个类型是否相同推荐使用 isinstance()

class Dog(object):
    pass


# 用Dog创建了一个对象pembroke,pembroke是Dog的实例
pembroke = Dog()
pembroke2 = Dog()
pembroke3 = Dog()
pembroke4 = Dog()
# 用来检查一个对象是否是一个类的实例
result = isinstance(pembroke, Dog)
result2 = isinstance(pembroke2, int)
result3 = isinstance(pembroke3, type(pembroke))
result4 = isinstance(pembroke4, type(pembroke4))
print(result, result2, result3, result4)

打印结果:True False True True
简单理解:isinstance()用来检查一个对象是否是一个类的实例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值