面向对象 —— 对象与类

Python 学习笔记


一、什么是面向对象

        对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象所指的是计算机系统中的某一个成分。在面向对象程序设计中,对象包含两个含义,其中一个是数据,另外一个是动作。对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。

emmm,还是看下通俗点的理解吧…

1.1、举例:" 面向对象 " 与 " 面向过程 "

如:把大象放入冰箱

1.面向过程:

打开功能 , 存储功能 , 关闭功能

人.打开     人.存储     人.关闭          (人不仅需要会用这几个功能, 还有知道具体怎么实现功能)


2.面向对象:
# 面向对象的编程思想,将相应的功能统一保存到相应的对象当中
# 这种方式编写的代码,比较容易阅读,并且比较容易维护,容易复用

分析:
(打开, 存储, 关闭)这三个功能, 都属于 "冰箱这一类事物所具备的行为动作"
所以, 只需要创建 "冰箱" 这么一个对象, 就可以完成操作

冰箱.打开     冰箱.存储     冰箱.关闭     (人只需要会用这几个功能就行, 具体实现不用管, 由冰箱自己实现)

再如:

我想吃汉堡,(调用) 某人(对象) 去买(跑腿、支付等功能)
我只是调用一个对象去完成某事, 并不关心其完成的过程, 这就是一个面向对象

1.2、" 面向对象 " 与 " 面向过程 "

  • 面向过程:
    1. 面向过程就是将程序的逻辑分解成一个一个的步骤;
    2. 通过对每个步骤的抽象来完成程序。

  • 面向对象:
    1. 面向对象是一种思考问题的方式, 面向对象它是一种思想。
    2. 面向对象将事务变的简单化。(如在上面的例子, 人 从’执行者’, 变为了’指挥者’)
    3. 所谓面向对象的编程语言,简单理解就是语言中所有的操作都是通过对象来完成的。




二、对象(object)


2.1、对象的简介

对象就是内存当中,专门用来存储指定数据的区域 。(可以理解为是一个用来装东西的 " 容器 "


2.2、对象的结果

每个对象在内存当中要保存 3 种数据:

  1. id(标识)
    id 是由编译器生成的,在 Cpython 中,id 就是对象的内存地址。对象一旦创建,则 id 无法改变。
    通过 id() 函数可以查看对象的 id 。

  2. type(类型)
    类型就是用来标识当前对象所属的类型。Python 是一门强类型语言,对象一旦创建,则类型无法改变。
    通过 type() 函数可以查看对象的类型。

  3. value(值)
    值就是对象中存储的具体数据。(对象分为两大类:可变对象,不可变对象)
    不可变(immutable): int、字符串(string)、float、(数值型number)、元组(tuple)
    可变(mutable): 字典型(dictionary)、列表型(list)




三、类(Class)


3.1、类的简介

  • 一般的,我们所使用的一些对象(如,int,str,list,tuple,dict…)这些都是 Python 的内置对象。然而,在开发中往往需要我们自己定义一些对象,这就要通过 类(Class) 来创建。
  • 类,简单理解就是相当于一个图纸。前面说过,对象相当于是 " 容器 ",那么这个容器的形状、内部结构等,就是由 这张 "图纸 " 来决定。我们也称对象是类的实例 ( instance )
  • 如果多个对象是通过一个类创建的,我们称之为这些对象都是一类对象。
  • 如果我们要自定义类,一般要使用大写字母开头如:MyClass
# 像 int() float() bool() list()...这些都是类

a = int(10) 								# 创建一个 int 类的实例 等价于 a = 10
b = str('hello') 							# 创建一个 str 类的实例

3.2、定义一个类

使用 class 关键字来定义。语法: class 类名([父类]): 代码块

class MyClass():
    pass

print(MyClass) 								# <class '__main__.MyClass'>

3.3、使用类来创建一个对象

使用类来创建对象,就像调用函数一样。

# 定义一个类

class MyClass():
    pass
    
# 使用 MyClass 来创建一个对象

mc = MyClass()  							# mc 就是通过 MyClass 创建的对象,mc 是 MyClass 的实例
mc_2 = MyClass()
mc_3 = MyClass()
mc_4 = MyClass()

# isinstance() 用来检测一个对象是否是一个类的实例

result = isinstance(mc,MyClass)
result2 = isinstance(mc_4,MyClass)
print(result,result2)



四、对象的创建流程

  • 类也是一个对象。类就是用来创造对象的对象。
  • 类是 type 类型的对象,定义类实际上就是定义了一个 type 类型的对象。
class MyClass():
    pass
    
print(id(MyClass),type(MyClass))

4.1、创建一个空的对象

class MyClass():
    pass
    
mc = MyClass()
print(mc)

4.2、向空对象中加变量

我们可以向对象当中添加变量,对象中的变量称之为 " 属性 "语法: 对象.属性名 = 属性值

class MyClass():
    pass

mc = MyClass()
mc.name = 'hello'
print(mc.name)

在这里插入图片描述



五、类的定义

  • 类的定义:类和对象都是现实生活中内容的抽象
  • 实际上所有的事物都是由两部分组织(
    1. 数据(属性)
    2. 行为(方法)

5.1、尝试定义一个人类

class Person():

    # 在类的代码块中, 我们可以定义变量
    # 在类中我们所定义的变量, 将会成为所以实例的公共属性, 所有实例都可以访问这些变量
    
    name = 'wlx'

    # 在类中也可以定义函数,类中定义的函数,我们称之为 "方法"
    # 这些方法也可以通过该类的实例来访问
    
    def say_hello():
        print('Hello!')

mc = Person()
print(mc.name)
mc.say_hello()	  							# 报错, 下面说

5.2、方便调用 和 函数调用 的区别

调用语法:对象.方法名

  • 函数调用,函数有几个形参,则调用函数的时候就要传递几个实参。
  • 方法调用,默认传递一个参数,所有方法中至少要定义一个形参。
    注意: 方法调用时,第一个参数由解释器自动传递,所以定义方法时,至少要定义一个形参。
                 第一个参数就是调用方法的本身, 一般我们都会将这个参数命名为 self (当然, 其他名字也行)。
                 “ 调用方法的本身 ”,意思是:哪个实例调用,self 就是谁
class Person():

    # 在类的代码块中, 我们可以定义变量
    # 在类中我们所定义的变量, 将会成为所以实例的公共属性, 所有实例都可以访问这些变量
    
    name = 'wlx'

    # 在类中也可以定义函数,类中定义的函数,我们称之为 "方法"
    # 这些方法也可以通过该类的实例来访问
    # 在类中方法不能访问类中的属性 __init__

    def say_hello(self):

        # 第一个参数就是调用方法的本身, 一般我们都会将这个参数命名为 self (当然, 其他名字也行)
        # 如: 是 p1 调用,则第一个参数就是 p1 对象
        
        print('你好!我是 %s'%self.name)

mc = Person()
p1 = Person()
p1.name = 'p1'         						# 也可以改变对象 p1 的属性值

print(mc.name)
print(p1.name)
mc.say_hello()

5.3、属性和方法

  • 1. 当我们调用一个 对象(p1) 的属性(name) 时,解析器会先在 当前对象(p1) 中寻找是否含有该属性;
  • 2. 如果有,则直接返回当前对象的属性值;
  • 3. 如果没有,则去当前对象的 类对象(Person) 中去寻找,如果有则返回类对象的属性值(wlx);
  • 4. 如果没有则报错。

类对象和实例对象都可以保存属性(方法), 那么保存时因如何选择?

  • 如果这个属性(方法)是所有实例共享的,则应该将其保存到类对象中
  • 如果这个属性(方法)是某个实例独有的,则应该保存到实例对象中

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值