Python面向对象-1 面向对象的概述——类与对象

一、面向对象

1. 面向对象概述

- 概述

面向对象编程 —— Object Oriented Programming 简写 OOP

面向对象编程的思想主要是针对大型 软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭 积木一样简单。

Python 中,一切皆对象。

注:Python 支持面向过程、面向对象、函数式编程等多种编程范式。

- 面向对象三大特性

  1. 封装
    • 根据 职责属性方法 封装 到一个抽象的
  2. 继承
    • 实现代码的重用,相同的代码不需要重复的编写
  3. 多态
    • 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度

- 面向对象和面向过程的区别

  • 面向过程(Procedure Oriented):注重的是问题解决的过程
    • 程更加关注的是“程序的逻辑流程”,是一种“执行者”思维
    • 适合编写小 规模的程序
  • 面向对象:注重的是谁去做这个事
    • 关注的是“软件中对象之间的关系”,是一种“设计者”思维
    • 适合编写 大规模的程序。
    • 宏观上使用面向对象把握,微观处理上仍然是面向过程

- 对象的进化(从面向过程到面向对象)

随着编程面临的问题越来越复杂,编程语言本身也在进化,从主要处理简单数据开始, 随着数据变多进化“数组”; 数据类型变复杂,进化出了“结构体”; 处理数据的方式和逻辑变复杂,进化出了“对象”。

  1. 简单数据:像 30,40,50.4 等这些数字,可以看做是简单数据。最初的计算机编程,都是像这样的数字。
  2. 数组:将同类型的数据放到一起。
    • 比如:整数数组[20,30,40],浮点数数组[10.2, 11.3, 12.4], 字符串数组:[“aa”,”bb”,”cc”]
  3. 结构体:将不同类型的数据放到一起,是C语言中的数据结构
struct resume{
    int age;
    char name[10];
    double salary;
};
  1. 对象:将不同类型的数据、方法(即函数)放到一起,就是对象。
class Student:
    company = "SXT" #类属性
    count = 0 #类属性
    def __init__(self,name,score):
        self.name = name #实例属性
        self.score = score
        Student.count = Student.count+1
    def say_score(self): #实例方法
        print("我的公司是:",Student.company)
        print(self.name,'的分数是:',self.score)

二、类和对象

1. 类和对象

- 概述

  • 类:是对是对一群具有 相同 特征 或者 行为
    的事物的属性行为的统称,或者说抽象不能直接使用
    • 属性:是什么(对应类里的属性
    • 行为:能做什么(对应类里的方法
    • 就相当于制造飞机时的图纸,是一个 模板,是
      负责创建对象的

类不能具体的表示一个真实存在的事物.

  • 对象:是类的一种实例表示,是 由类创建出来的一个具体存在,可以直接使用
    • 是真实存在的,看得见摸得到的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OuDgfnQn-1610804910831)(Media/image-20210105220030595.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3Xaxb63-1610804910835)(Media/image-20210105220202513.png)]

- 类与对象的关系

  • 类就是创建对象的模板

  • 只有一个,而 对象 可以有很多个

    • 不同的对象 之间 属性 可能会各不相同
  • 中定义了什么 属性和方法对象
    中就有什么属性和方法,不可能多,也不可能少

  • Python 中,“一切皆对象”。类也称为“类对象”

  • 类的实例也称为“实例对象”。

- Python的对象

一个 Python 对象包含三个部分:

  1. id(identity 识别码)
  2. type(对象类型)
  3. value(对象的值)。

我们可以更进一步的说,一个 Python 对象包含如下部分:

  1. id(identity 识别码)
  2. type(对象类型)
  3. value(对象的值)
    1. 属性(attribute)
    2. 方法(method)

2. 类Class

- 类的构成

类(Class) 由3个部分构成

  • 类的名称:类名,满足大驼峰命名法
  • 类的属性:具有什么样的特征
  • 类的方法:允许对进行操作的方法 (行为)

- 类的定义格式

经典类(Python2.X,Python3.X)

class 类名:
	属性
	行为
    
class 类名():
	属性
	行为

新式类:(Python3.X)

class 类名(object):
	属性
	方法

在 python3 以后,只有新式类

class Cat(object):
    name = "Tom"  # 属性
    def eat(self):  # 方法
        print('吃')

注意:

  • 上述三种格式都可以使用,推荐使用新式类的方式书写

  • 方法和函数的区别在于:方法括号内多了一个self

    • self代表实例对象本身,指向了这个实例对象
    • 可以将self换为其他变量,但一般不会用其他变量
  • object是Python里所有类的最顶级父类

  • 类名命名规则按照大驼峰命名法

3. 对象Object

1. 创建对象

对象名 = 类名(参数列表....)
  • 创建对象:即实例化,实例一个对象
  • 实例对象时,会在内存中分配一块内存空间,这个空间就是这个对象的位置,然后将这个地址引用返回给对象名
  • 实例对象时,调用了__new__()函数

2. 使用对象的格式

对象调用方法的格式:

对象名.方法名(参数列表)

注意:

  • 方法中参数列表中的第一个参数self,不需要手动传递,这个参数是由解释器在执行程序时,自动传递的
  • 默认会将当前调用方法的对象引用传递进去

3. 创建多个对象

  • 如果通过同一个类,创建多次对象时,多次创建的对象是类型相同,但地址不同多个对象

4. 实例对象和类对象创建过程(内存分析)

class Student:
    company = "尚学堂" #类属性
    count = 0 #类属性
    
    def __init__(self,name,score):
        self.name = name #实例属性
        self.score = score
        Student.count = Student.count+1
        
    def say_score(self): #实例方法
        print("我的公司是:",Student.company)
        print(self.name,'的分数是:',self.score)


s1 = Student('高淇',80) #s1 是实例对象,自动调用__init__()方法
s1.say_score()
print('一共创建{0}个 Student 对象'.format(Student.count))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LE9XwK7g-1610804910838)(Media/image-20210105222347066.png)]

注意,实例方法是加载在类对象里的,实例对象引用了类对象中的实例方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值