一天学会python面向对象,一篇文章就够了 #大量实例 #多图预警

一天学会python面向对象,一篇文章就够了

面向对象基础

  • 面向对象编程 Object Oriented Programming 简写 OOP
  • 面向过程面向对象,是两种不同的编程方式

1)过程和函数

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

2)面向过程 和 面向对象

1>面向过程(怎么做)

  1. 把完成某个需求的 所有步骤 从头到尾 逐步实现
  2. 根据开发需求,将某些功能独立的代码封装成一个个函数
  3. 最后完成的代码,就是顺序地调用不同的函数
  • 特点:
  1. 注重步骤与过程,不注重职责分工
  2. 如果需求复杂,代码也会变得复杂
  3. 没有固定的套路,开发复杂项目时难度很大

2>面向对象(谁来做)

面向对象是更大的封装,根据职责在一个对象中封装多个方法

  1. 在完成某一个需求前,首先确定职责==>要做的事情(方法)
  2. 根据职责确定不同的对象,在对象内部封装不同的方法
  3. 最后完成的代码,就是顺序地让不同的对象调用不同的方法
  • 特点:
  1. 注重对象和职责,不同的对象承担不同的职责
  2. 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路
  3. 需要在面向过程基础上,再学习一些面向对象的语法

游戏中,每个角色的技能职责不同,就很像这一个个对象。它们的技能就是各种方法。

3>类和对象

1.类
  • 是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用
  • 特征被称为属性(变量)
  • 行为 被称为方法(函数)
  • 是一个模板,负责创建对象(实例)
2.对象
  • 对象是有类创建出来的一个具体存在,可以直接使用
  • 创建的对象,拥有类的属性和方法
  • 在程序开发中,先有类,后有对象
3.类和对象的关系
  • 类和对象的区别,也类似于 人类某个具体的人的区别
  • 由一个创建的对象可以有很多个
  • 不同的对象之间属性可能会各不相同
  • 中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少
4.类的设计
  1. 分析需求,确定一下,程序中需要包含哪些类
  2. 类的设计三要素
  1. 类名大驼峰命名法
  2. 属性事物的特征
  3. 方法事物的行为
  • 名词提炼法分析整个业务流程,出现的名词,基本就可以作为类名

需求中没有涉及的属性或者方法在设计类时,不需要考虑

  • 翅膀,身体上有羽毛,喜欢
  • 没有翅膀,身体上有狗毛,喜欢尾巴

5.查看方法的函数dir()
  • python中,一切皆是对象
  • dir(标识符/数据)==>查看对象内的所有属性及方法
    提示__方法名__格式的方法是python提供的内置方法/属性
方法名 类型 作用
__new__ 方法 创建对象时,会被 自动 调用
__init__ 方法 对象被初始化时,会被 自动 调用
__del__ 方法 对象被从内存中销毁前,会被 自动 调用
__str__ 方法 返回对象的描述信息print 函数输出使用
__doc__ 方法 对象中的文档说明

4>定义类

  • 定义类
Class 类名:
    
    变量1 =1
    变量2 =2
    
    def 方法1(self,参数列表):
        pass

    def 方法2(self,参数列表):
        pass
  • 创建对象(类的实例化)
对象名(是一个变量) = 类名()
  • 面向对象开发的特点:只负责让对象去工作,而不再关心方法的内部细节
  • 面向对象开发中,引用的概念同样适用。对象变量记录的依然是对象在内存中的地址
print(one_class)  # <__main__.OneClass object at 0x01BAC2D0>

上面的print函数打印了一个对象,其显示的结果是:该对象所属的类 at 内存中的地址(十六进制表示)

  • print("%d" % 变量名) # 输出10进制地址
  • print("%x" % 变量名) # 输出16进制地址

5>self参数

1. 给对象增加属性
  • 在python中,要给对象设置属性,非常容易,!!!不推荐使用!!!(对象属性的封装一个封装在类的内部)
  • 只需要在类的外部的代码中直接通过赋值语句设置一个属性即可
实例名.新属性名 = 属性值
  • **在外部增加对象属性的隐患:**在类外部给对象增加属性,目的肯定是为了使用。为了使用,类里面的方法,肯定就会引用数据(属性),如果忘了在外部传入某属性,那么程序就会报错。
  • 提示:
  • 在日常开发中,对象应该包含哪些属性,应该封装在类的内部
2. self保存了什么
  • 通过单步调试工具,会发现self的内存地址和调用方法的实例对象的内存地址一模一样。说明:

在这里插入图片描述
在这里插入图片描述

  • self 本来就是一个形参,它传入的参数是实例对象
  • 哪一个对象调用的方法,self就是哪一个方法的引用
  • 在方法内部,要访问对象的属性或方法加上个self.即可

6>几个内置方法与对象的生命周期

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

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

class1:

    def __init__(self, 形参1):
    
        self.属性1 = 形参1


# 实例化
实例1 =1(参数1)
  • 如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造
  1. 把希望设置的属性值,定义成初始化函数的参数
  2. 在方法内部使用 self.属性名 = 形参名 接收外部传递的参数
  3. 在创建对象时,使用 类名(属性1,属性2…) 调用
2.销毁前方法__del__
  • 当一个对象从内存中销毁前,会自动调用__del__方法
  • 一个实例是一个全局变量,所以只有所有程序执行完成时,才会被回收。也就是程序所有操作的最后,才会调用__del__方法。(也可以使用del关键字强制回收,回收时,触发__del__方法)

class VClass:
    "这是一个对象"

    def __init__(self, arg):

        self.arg = arg
        print("%s 初始化成功" % self.arg)

    def __del__(self):

        print("%s 成功被销毁" % self.arg)

A_class = VClass("A对象")

# 打印在终端的结果显示: 分割线在A对象销毁的上方,说明整个程序结束才销毁 A_class 对象
print("=" * 50)

B_class = VClass("B对象")
del B_class

# 打印在终端的结果显示: 分割线在B对象销毁的下方,说明del提前回收了 B_class 对象
print("*" * 50)

3. 生命周期
  • 一个对象从被创建时,生命周期开始
  • 在对象的生命周期内,可以访问对象属性,或者人对象调用方法
4.打印自定义的内容__str__
  • python使用print打印一个对象会返回 <main.类名 object at 实例所在内存地址>
  • 如果希望print打印这个对象时,输入我们自定义的内容,就可以用__str__函数
  • __str__函数返回的对象,必须是一个字符串

class VClass:
    "这是一个对象"

    def __init__(self, arg):

        self.arg = arg
        print("%s 初始化成功" % self.arg)

    def __del__(self):

        print("%s 成功被销毁" % self.arg)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值