Python 第六章 面向对象编程

本文深入探讨了Python的面向对象编程,从面向过程与面向对象的对比开始,讲解了类和对象的概念,包括实例属性、实例方法、类方法、静态方法、构造方法`__init__`和`__new__`,以及私有属性和方法。此外,还涉及了内存分析、析构函数`__del__`、可调用对象和`@property`装饰器等关键概念,帮助读者全面理解Python的面向对象编程。
摘要由CSDN通过智能技术生成

每篇前言

       面向对象编程

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

        面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率

        Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承多态封装

        Python中,一切皆对象.数据类型、函数等都是对象

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


一、面向对象初步

      1. 面向对象和面向过程的区别            

        面向过程思维

                面向过程编程更加关注的是“程序的逻辑流程”,是一种“执行者”思维,适合编写小规模的程序.面向过程思考问题时,我们首先思考“怎么按步骤实现?”并将步骤对应成方法,一步一步,最终完成.面向过程适合简单不需要协作的事务

        面向对象思维

                面向对象更加关注的是“软件中对象之间的关系”,是一种“设计者”思维,适合编写大规模的程序.面向对象思想更契合人的思维模式.我们首先思考的是“怎么设计这个事物?”面向对象可以帮助我们从宏观上把握、从整体上分析整个系统.但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理

                面向过程面向对象他们是相辅相成的,面向对象离不开面向过程

        面向对象思考方式

                遇到复杂问题,先从问题中找名词(面向过程更多的是找动词),然后确立这些名词哪些可以作为类,再根据问题需求确定的类的属性和方法,确定类之间的关系

        面向对象和面向过程的总结

                解决问题的思维方式都是代码组织的方式

                解决简单问题可以使用面向过程

                解决复杂问题宏观上使用面向对象把握,微观处理上仍然是面向过程

        2.对象的进化           

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

        3.类的定义 

           通过类定义数据类型的 属性(数据) 方法(行为) ,也就是说,“ 类将行为和状态打包在一起 ”.
           对象 类的具体实体 ,一般称为“ 类的实例 ”.类看做“饼干模具”,对象就是根据这个“模具”制造出的“饼干”.
                  
          从一个 类创建对象 时, 每个对象会共享这个类的行为(类中定义的方法) ,但会有 自己的属性值(不共享状态) .更具体一点:“ 方法代码是共享的,属性数据不共享 ”.
       
          Python中,“ 一切皆对象 ”.类也称为“ 类对象 ”, 类的实例 也称为“ 实例对象 ”.
          定义类的语法格式如下:
          class类名:
                  类体
          要点
                  1. 类名必须符合“ 标识符 ”的规则;一般规定, 首字母大写 ,多个单词使用“ 驼峰原则
                  2. 类体中我们可以定义 属性 方法
                  3. 属性 用来 描述数据 , 方法(即函数) 用来 描述这些数据相关的操作
          
# 一个典型的类的定义
class Student:                        # 类名一般首字母大写,多个单词采用"驼峰原则"
    def __init__(self, name, score):  # 构造方法第一个参数必须为 self
        self.name = name              # 实例属性
        self.score = score

    def say_score(self):              # 实例方法
        # print(self.name, '的分数是:', self.score)
        print("{0}的分数是: {1}".format(self.name, self.score))

s1 = Student('狗蛋', 80)      # s1是实例对象,自动调用 __init__() 方法
s1.say_score()
Student.say_score(s1)

print(s1.__dict__)
print(isinstance(s1, Student))

打印结果:
狗蛋的分数是: 80
狗蛋的分数是: 80
{'name': '狗蛋', 'score': 80}
True

        4.__init__构造方法和__new__方法

            抽象的 ,也称之为“ 对象的模板 ”.我们需要通过类这个模板, 创建类的实例对象 ,然
后才能使用类
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【课程内容列表】 .gitignore PEP8风格指南.md Python编程惯例.md Python参考书籍.md Python之禅.md README.md 更新日志.md 玩转PyCharm.md Day01-15\01.初识Python.md Day01-15\02.语言元素.md Day01-15\03.分支结构.md Day01-15\04.循环结构.md Day01-15\05.构造程序逻辑.md Day01-15\06.函数和模块的使用.md Day01-15\07.字符串和常用数据结构.md Day01-15\08.面向对象编程基础.md Day01-15\09.面向对象进阶.md Day01-15\10.图形用户界面和游戏开发.md Day01-15\11.文件和异常.md Day01-15\12.字符串和正则表达式.md Day01-15\13.进程和线程.md Day01-15\14.网络编程入门和网络应用开发.md Day01-15\15.图像和办公文档处理.md Day16-20\16-20.Python语言进阶.md Day21-30\21-30.Web前端概述.md Day31-35\31-35.玩转Linux操作系统.md Day36-40\36-38.关系型数据库MySQL.md Day36-40\39-40.NoSQL入门.md Day41-55\41.Django快速上手.md Day41-55\42.深入模型.md Day41-55\43.静态资源和Ajax请求.md Day41-55\44.Cookie和Session.md Day41-55\45.制作报表.md Day41-55\46.日志和调试工具栏.md Day41-55\47.中间件的应用.md Day41-55\48.前后端分离开发入门.md Day41-55\49.RESTful架构和DRF入门.md Day41-55\50.RESTful架构和DRF进阶.md Day41-55\51.使用缓存.md Day41-55\52.文件上传.md Day41-55\53.异步任务和定时任务.md Day41-55\54.单元测试.md Day41-55\55.项目上线.md Day56-60\56.Flask入门.md Day56-60\57.模板的使用.md Day56-60\58.表单的处理.md Day56-60\59.数据库操作.md Day56-60\60.项目实战.md Day61-65\61.预备知识.md Day61-65\62.Tornado入门.md Day61-65\63.异步化.md Day61-65\64.WebSocket的应用.md Day61-65\65.项目实战.md Day66-75\66.网络爬虫和相关工具.md Day66-75\67.数据采集和解析.md Day66-75\68.存储数据.md Day66-75\69.并发下载.md Day66-75\70.解析动态内容.md Day66-75\72.Scrapy入门.md Day66-75\73.Scrapy高级应用.md Day66-75\74.Scrapy分布式实现.md Day66-75\75.常见反爬策略及应对方案.md Day76-90\76.机器学习基础.md Day76-90\77.Pandas的应用.md Day76-90\78.NumPy和SciPy的应用.md Day76-90\79.Matplotlib和数据可视化.md Day76-90\80.k最近邻分类.md Day76-90\81.决策树.md Day76-90\82.贝叶斯分类.md Day76-90\83.支持向量机.md Day76-90\84.K-均值聚类.md Day76-90\85.回归分析.md Day76-90\86.大数据分析入门.md Day76-90\87.大数据分析进阶.md Day76-90\88.Tensorflow入门.md Day76-90\89.Tensorflow实战.md Day76-90\90.推荐系统实战.md Day91-100\100.Python面试题集.md Day91-100\91.团队项目开发的问题和解决方案.md Day91-100\92.Docker容器详解.md Day91-100\93.MySQL性能优化.md Day91-100\94.网络API接口设计.md Day91-100\95.使用Django开发商业项目.md Day91-100\96.软件测试和自动化测试.md Day91-100\97.电商网站技术要点剖析.md Day91-100\98.项目部署上线和性能调优.md
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

93蔺先森

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

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

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

打赏作者

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

抵扣说明:

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

余额充值