python学习笔记之类和对象

面向对象(OOP)基本概念

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

01.面向对象基本概念

  • 之前学习的C语言编程方式就是 面向过程
  • 面向过程面向对象 ,是两种不同的编程方式
  • 对比 面向过程的特点 ,可以更好地了解什么是 面向对象

1.1过程和函数(科普)

  • 过程 是早期的一个编程概念
  • 过程 类似于函数,只能执行,但是没有返回值
  • 函数 不仅能执行,还可以返回结果

1.2面向过程 和 面向对象基本概念

1)面向过程怎么做?

  1. 把完成一个需求的所有步骤,从头到尾 逐步实现
  2. 根据开发要求,将某些 功能独立 的代码 封装 成一个有一个 函数
  3. 最后完成的代码,就是顺序的调用 不同的函数

特点

1.注重 步骤与过程, 不注重职责分工

2.如果需求复杂,代码会变得很复杂

3.开发复杂项目,没有固定的套路,开发难度很大

2)面向对象 – 谁来做?

相比较函数,面向对象 是更大的 封装 ,根据 **职责 ** 在 一个对象中 封装 多个方法

  1. 在完成某一个需求前,首先确定 职责要做的事情 (方法)
  2. 根据职责确定不同的对象,在对象内部封装不同的方法(多个)
  3. 最后完成的代码,就是顺序的让 不同的对象 调用 不同的方法

特点

1.注重 对象和职责 ,不同的对象承担不同的职责

2.更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路

3.需要在面向过程基础上,在学习一些面向对象的语法

类和对象

01.类和对象的概念

对象面向对象编程的两个核心概念

1.1类

  • 类是一群具有 相同特征 或者 行为 的事物的一个统称
    • 特征 被称为 属性
    • 行为 被称为 方法
  • 就相当于制造飞机时的图纸,是一个模板,是负责创造对象

1.2对象

  • 对象是由类创建出来的一个具体存在,可以直接使用
  • 由哪一个类创建出来的对象,就拥有在哪一个类中定义的
    • 属性
    • 方法
  • 对象就相当于 图纸制造 的飞机

在程序开发中,应该 先有类,再有对象

02.类和对象的关系

  • 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象
  • 类只有一个,而对象可以有很多个
    • 不同的对象之间 属性 可能会各不相同
  • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少

03.类的设计

在使用面向对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!

在程序开发中,要设计一个类,通常需要满足以下三个要素:

1.类名:这类事物的名字,满足大驼峰命名法

2.属性:这类事物具有什么样的特征

3.方法:这类事物具有什么样的行为

大驼峰命名法

1.每一个单词的首字母大写

2.单词与单词之间没有下划线

3.1类名的确定

名词提炼法 分析整个业务流程,出现的名词,通常就是找到的类

3.2 属性和方法的确定

  • 对象的特征描述,通常可以定义成属性
  • 对象具有的行为(动词),通常可以定义成方法

提示:需求中没有涉及的属性和方法,在设计类时,不需要考虑

举例练习

需求:

  • 小明今年18岁,身高1.75,每天早上跑完步,会去吃东西
  • 小美今年17岁,身高1.65,小美不跑步,小美喜欢吃东西
Person
属性name, age, height
方法run() , eat()

**提示:**利用好dir 函数,在学习很多内容就不需要死记硬背了

02.定义简单的类(只包含方法)

面向对象更大封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了

2.1 定义只包含方法的类

  • 在 python中定义一个只包含方法的类,语法格式如下:
class 类名:
	def 方法1(slf,参数列表)pass
    def 方法2(self,参数列表)pass   
  • 方法 的定义和格式和之前学过的函数几乎一样
  • 区别在于第一个参数必须是 self

注意:类名 的命名规则要符合大驼峰命名法

2.2 创建对象

  • 当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()

举例

class Cat:
    """这是一个猫类"""
    
    def eat(self):
        print('小猫爱吃鱼')
        
    def drink(self):
        print('小猫在喝水')
       
tom = Cat()   # 创建对象
tom.eat()     # 通过 . 的方式来调用对象的方法
tom.drink()


# 一个类中可以有多个对象
lazzy_cat = Cat()    # tom 和 lazzy_cat 是一个类中的不同对象
lazzy_cat.eat()
lazzy_cat.drink()
        

03.方法中的self参数

3.1案例改造–给对象增加属性

  • 在python中,要给对象设置属性,非常的容易,但是不推荐使用
    • 因为:对象属性的封装应该封装在类的内部
  • 只需要在类的外部的代码中直接通过 . 设置一个属性即可

注意:这种方式虽然简单,但是不推荐使用

class Cat:
    """这是一个猫类"""
    
    def eat(self):
        # 哪一个对象调用的方法,self就是哪一个对象的引用
        print('小猫爱吃鱼')
        
    def drink(self):
        print('小猫在喝水')
       
tom = Cat()  
tom.name = 'Tom'   # 在类的外部,给对象增加属性
tom.eat()     
tom.drink()

3.2使用self在方法内部输出每一只猫的名字

由哪一个对象调用的方法,self 就是哪一个对象的引用

  • 在类封装的方法内部,方法内的 self 就表示当前调用方法的对象自己
  • 调用方法时,程序员不需要传递 self 参数
  • 在方法内部
    • 可以通过 self . 访问对象的属性
    • 也可以通过 self . 调用其他的对象方法

改造代码如下:

class Cat:
  
    def eat(self):
        # 哪一个对象调用的方法,self就是哪一个对象的引用
        print('%s爱吃鱼' % self.name)
          
tom = Cat()  
tom.name = 'Tom'   # 在类的外部,给对象增加属性
tom.eat()     

3.3初始化方法

  • 当使用类名创建对象时,会自动执行以下操作:
    1. 为对象在内存中分配空间 – 创建对象
    2. 为对象的属性设置初始值 – 初始化方法( init )
  • 这个初始化方法就是 __ init __ 方法, __ init __ 方法是对象的内置方法

__ init __ 方法是专门用来定义一个类 具有哪些属性的方法!

3.4 在初始化方法内部定义属性

  • 在 __ init __方法内部使用 self . 属性名=属性的初始值 就可以定义属性
  • 定义属性之后,再使用 Cat 类创建的对象,都会拥有该属性
class Catdef __init__(self):
	
		print('这是一个初始化方法')
		
		# 定义用 Cat 类创建的猫对象都有一个 name 的属性
		self.name = 'Tom'
		
	def eat(self):
		print('%s爱吃鱼' % self.name)

# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat()
tom.eat()

3.5改造初始化方法 – 初始化的同时设置初始值

  • 在开发中,如果希望在 创建对象 的同时, 就设置对象的属性,可以对__ init __方法进行改造
    1.把希望设置的属性值,定义成 __ init __ 方法的参数
    2.在方法内部使用 self.属性=形参,接收外部传递的参数
    3.在创建对象时,使用 类名(属性1,属性2…) 调用
class Catdef __init__(self,name):
	
		print('这是一个初始化方法')
		
		# 定义用 Cat 类创建的猫对象都有一个 name 的属性
		self.name = name
		
	def eat(self):
		print('%s爱吃鱼' % self.name)

# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat('Tom')
lazy_cat=Cat('大懒猫')
lazy_cat.eat()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*Heygirl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值