面向对象(一)-初步认识

一 面向对象和面向过程

什么面向过程,什么是面向对象,二者之间有什么区别?

答:这是两种不同的开发代码的模式.

  • 面向过程开发(Procedure Oriented Programming,POP):按照业务的逻辑顺序,通过函数来实现某一功能,从上到下逐一调用函数的过程,比较适合功能变化不多的场景,C语言编写操作系统。

  • 面向对象设计(Object Oriented Programming,OOP):将数据与对数据的操作看做一个整体即对象,以对象为中心的编程思想,以对象的⻆度去处理问题,通过对象之间的操作完成任务。这种编程理念更符合我们人的逻辑思维。使用面向对象编程可以提高我们的开发速度和代码的重用率,适合于变化多,场景复杂情况。

通俗理解:

​ 面向过程----老板自己独自作战----所有的事情都需要自己去玩,亲力亲为

​ 面向对象---老板雇佣员工---老板分配职责,发号施令

二 面向对象的相关概念

(一)类和对象概念

1 类和对象

类:将多个对象共同具有的特征和行为抽象出来,定义一个名字

示例:物以类聚,人以群分

对象:具有特征和行为的一个具体概念,强调具体

2 类和对象之间的关系
  • 对象通过类来创建产生
  • 一个类可以有多个对象
  • 一个对象只能属于某一个类
3 区分类和对象
笔记本   # 类
ThinkPad笔记本   # 类
t440s ThinkPad笔记本  # 类
编号为123123的t440s笔记本  # 对象


汽车  # 类
宝马汽车  # 类
5系宝马  # 类
楼下停着的那辆5系宝马车  # 对象

(二) 属性和方法

  • 属性:描述一个对象具有的特征,一个名词性概念,静。
  • 方法:描述一个对象具有的行为,一个动词,动。

三 如何实现类

#类的定义格式
class 类名:
    def __init__(self):
        """定义属性:描述特征"""
        self.属性1 = 属性值1
        self.属性2 = 属性值2
        ...
    
    def 方法1(self):
        """具体描述的行为1"""
        pass
    
    def 方法2(self):
        """描述的行为2"""
        pass
    
    ...

# 通过类创建对象,如果init函数中有参数则需要传入
对象名 = 类名()
    
# 对象调用具体属性和方法
# 调用属性
对象名.属性名
# 调用方法
对象名.方法名()   # 传参时不需要给self传

说明:

  • class:关键字,用于声明一个类。
  • 类名:标识符,遵循标识符规则,使用大驼峰命名法:每个单词的首字母大写
  • 描述对象特征:在__init__方法中定义对象的属性
  • 描述行为:在类中定义方法,同函数。
  • 每一个方法都需要一个固定的参数,self。

面向对象设计

面向对象程序设计开发,是一种成熟的程序设计开发方式,有固定的开发步骤,通常包含如下四个环节:

  • 面向对象分析(OOA:Object-Oriented Analysis):从用户需求出发,分析项目中需要解决的问题,抽象项目中的功能和互相依赖的关系,确定功能开发过程中的限制条件

  • 面向对象设计(OOD:Object-Oriented Design):根据分析得到的具体的问题,抽取参与解决问题的对象

  • 面向对象编程(OOP:Object-Oriented Programming)

  • 编程对象测试(OOT:Object-Oriented Testing)

四 self的作用

self谁调用我,我就是谁-----哪个对象调用某个方法,那么该方法的self就是该对象

class Person:
    def __init__(self,name,age,height):
        """描述一个人的特征"""
        self.name = name
        self.age = age
        self.height = height

    def eat(self):
        """描述吃饭行为"""
        print(f"self的内存地址是{id(self)}")
        print(f"{self.name}中午吃的是阿明煲仔饭,吃出了头发~")


    def sleep(self):
        print(self.age)

zs = Person('zs',20,180)
ls = Person('ls',22,175)

print(f"zs的内存地址是{id(zs)}")
zs.eat()
print('======================')
print(f"ls的内存地址是{id(ls)}")
ls.eat()

属性和变量区别

属性:self.属性名 = 值,可以在整个类的内部任何方法中使用。

变量: 变量名= 值,变量只能够在某个函数内起作用。是一个局部变量

五 属性和方法

实例属性和方法都是描述具体某一个对象的。

实例属性:指在__init__方法中定义的属性

实例方法:指方法中具有一个参数self.

六 对象的创建过程

对象创建过程:__new__方法创建对象并将对象返回给__init__方法,__init__方法对该对象进行初始化操作

问题:__new__和__init__方法哪个先执行?

_new_ 方法

class Person:
    def __new__(cls, *args, **kwargs):
        """创建一个对象"""
        print("执行了new方法")
        return object.__new__(cls)

    def __init__(self,name):
        """实例初始化方法"""
        print("执行了init方法")
        self.name = name


    def eat(self):
        print('eat')



ls = Person('ls')
print(ls)
ls.eat()

posted @ 2020-12-07 14:50  小杜打醋尢买布  阅读(89)  评论(0编辑  收藏  举报