• 面向对象

    • 父类、子类之间的联系

      • 包装器(wrapper)/装饰器(decorator)
  • 异常机制
  • Python中文件的读取和改写
  • Pygame
  • 心得

面向对象

  • 面向对象应该是我们学习python的重中之重。老师说面向对象的程序语言编写显得更加的人性化,更加的易于人们接受和理解,所以这周我们主要是对面向对象编程的一次深入研究。

  • 面向对象编程方法,通过class来定义一个类,再在这个类中用def来定义一个方法,而且它必须有一个额外的第一个参数名称,按照习惯我们一般写成self,当然换做其他的例如runoob也是可以的:

class Example(object):def one(self):...
  • 我们在定义类的时候往往都会有些初始状态,会有些参数,这时候我们就需要

    def __init__(self,x,y,z):
    self._x = x
    self._y = y

  • 这样我们在进行类的实例化操作时,便会自动调用这个方法。当参数是不定的时候我们可以用*args,或者关键字**kwargs的方法来进行参数的定义。

父类、子类之间的联系

class Father(object):def __init__(self, x, y, z):self._x = xself._y = yself._z = zclsaa Son(Father):def __init__(self, x, y, t):super().__init(x, y)self._t = t
  • 由上例中可以看出,我们首先创建了一个类叫Father,之后又创建了一个类叫Son,Son这个类可以继承Father的相同属性,Son自己也可以有自己的私有属性,所以称Father为父类,Son为子类。

  • 同样的道理,子类也是可以继承父类中定义的方法的,同时也可以进行覆写。子类调用经过覆写之后的方法,输出的是子类中的方法,父类调用的则仍然是没有进行覆写的方法。如果同时有多个子类进行了方法的覆写,则各子类的输出是各经过改写的方法的输出。

包装器(wrapper)/装饰器(decorator)

def record(fn):def wrapper(*args,**kwargs):print('准备执行%s函数' % fn.__name__)print(args)print((kwargs))# 此行代码在执行被装饰的函数# 在这行代码的前后我们可以附加其他的代码# 这些代码可以让我们正在执行函数时做一些额外的工作val = fn(*args,**kwargs)print('%s函数执行完成' % fn.__name__)print('返回了%d' % val)# 返回被装饰的函数的执行结果return valreturn wrapper
# 通过装饰器修饰f函数 让f函数在执行过程中可以做更多地额外的操作
@record
def f(n):if n == 0 or n == 1:return 1return n * f(n - 1)if __name__ == '__main__':print(f(n))
  • 当上述程序的n取值为1时,其输出结果为:
准备执行f函数
(1,)
{}
f函数执行完成
返回了1
1
  • 由此可知,在被装饰的代码执行之前,会执行装饰器的代码,这样我们可以让被装饰的函数在执行过程中做更多额外的操作。python一向要求:高内聚,低耦合,我们可以通过定义一个函数的第二个参数是另一个函数达到这个目的,这样可以使得该函数不与某种特定的二元运算耦合起来。这样的运算函数可以使用lambda函数(匿名函数)来实现,例如加法:
lambad x, y : x + y
  • 我们在定义一个类的时候,往往会将其中的参数作为私有参数,不允许外部调用:
calss Drs(self):def __init__(self, x, y):self._x = xself._y = y
  • 一个下划线开头或者两个下划线开头指这个属性是这个类私有的,外部不能调用(实际上python中是不能够保证的,所以这个只是告诉别人这个是私有的,不能随便修改)。我们在绑定属性时,如果直接将属性暴露出去,虽然写起来很容易,但是没有办法检查参数,导致属性会被随意修改,所以这里我们需要@property装饰器,这个装饰器的意义是将一个方法变成属性调用。
@property
def x(self):return self._x
  • 而通过@property装饰器我们还可以获得一个@x.setter装饰器,从而可以将x进行属性赋值:
@x.setter
def x(self,a):self._x = a
  • 这里的one.x(b)输出就为self._x = b。简而言之,@property``@.setter分别是属性访问器和属性修改器,@.deleter则是属性删除器

  • 我们还有静态方法@staticmethod和类方法@classmethod这两种包装器用来对类进行包装,不过在下学艺不精,不是太怎么懂这两者的区别,就暂借网上的解释了:

    1. 普通方法(simple) def f(self, x): 的第一个参数 self 绑定的对象是实例对象 a, 第二个参数是 x ;
    2. 类方法(classmethod) def f(cls, x): 的第一个参数 cls 绑定的对象是类 A , 第二个参数是 x ;
    3. 静态方法(staticmethod) def f(x): 的第一个参数就是传参 x 自己.
  • 当定义类的时候,会有些不能存在的情况,如果发生了,可以使用raise ValueError()来引发错误,并将错误简单告诉使用者。

  • python没有从语言层面支持抽象类的概念.我们可以通过abc模块来制造抽象类的效果,from abc import ABCMeta, abstractmethod通过在定义类的时候通过制定metaclass = ABCMeta可以将类声明为抽象类。抽象类是不能创建对象的,抽象类存在的意义是专门拿给其他类继承abc模块中,还有一个包装器abstractmethod通过这个包装器可以将方法包装为抽象方法,必须要求子类进行重写,如果子类没有进行重写则直接报错。__slots__则是限制类的绑定属性的,__slots__ = ('name', 'age')这个就限制类只能绑定name``age,如果绑定其他属性的话就会报错。

异常机制

  • 我们在程序的运行过程中往往是会遇到问题的,而且不是所有的问题都能够在调试程序的时候发现的,所以我们可以将一些容易发生问题的程序放在try:下进行运行,再通过except Error来进行错误的捕获,例:
def main():filenames = ('lalala.txt', 'lala.txt', 'la.txt')fs_list = []try:# 把有可能出状况(在执行时有风险)的代码放在try代码块保护执行for filename in filenames:fs_list.append(open(filename, 'w', encoding='utf-8'))for number in range(1,10000):if sushu(number):if number < 100:fs_list[0].write(str(number) + '\n')elif number < 1000:fs_list[1].write(str(number) + '\n')elif number < 10000:fs_list[2].write(str(number) + '\n')except IOError:# 如果try中出现了状况就通过except来捕获错误(异常)进行对应的处理print('读写文件发生错误')else:# 如果没有出状况,那么可以把无风险的代码放到else中执行passfinally: # 不管程序正常或异常,总是会执行。这里是最好的释放外部资源的位置for fs in fs_list:fs.close()print('操作完成')

Python中文件的读取和改写

def main():try:with open('lalala.txt', 'r', encoding='utf-8') as fs:  # 这种方法打开,会在之后自动将其关闭mylist = fs.readlines()print(mylist)except FileNotFoundError:print('指定的文件无法打开.')print('程序执行结束.')
def main():try:fs = open('lalala.txt', 'r', encoding='utf-8')content = fs.read()for line in fs:print(line,end='')time.sleep(0.5)print(content)fs.close()# 这个方法必须进行手动关闭文件except FileNotFoundError:print('指定的文件无法打开.')print('程序执行结束.')
  • 我们的python是面向网络的,所以我们需要学习json的内容,用json与文件的读取、改写相结合,在此,我就将老师课堂上的例子放在这好了,毕竟我也不会:
import requests
import jsondef main():resp = requests.get()mydict = json.loads(resp.text)for tempdict in mydict['newslist']:pic_url = tempdict['picUrl']resp = requests.get(pic_url)filename = pic_url[pic_url.rfind('/') + 1:]try:with open(filename, 'wb') as fs:fs.write(resp.content)except IOError as e:print(e)
  • 作为周五最后学的知识,以及作为下一周的重点的知识内容,必定需要我们自己多多学习领悟。

Pygame

  • 本周我们主要学习了使用pygame来进行游戏的编写,主要使用了面对对象的编写方法,融合使用了函数,嵌套定义,返回值,参数,可变参数,关键字参数,等这三周学习的内容。本人愚钝,并不能完全领会,只能识其皮毛。

心得

  • 跟第二周的感觉其实没有多大变化,因为这周的pygame主要是将前两周的知识点进行了融汇升华,从而让学生们自己领悟。但因为是融合的所有知识点,所以难度也是肯定的,而且pygame的很多操作我并不会,所以我卡壳的时间也比较长。现在的感觉就是,给我个代码,我大概能看懂,但是自己写的话可能需要花费很长时间,也有可能解决不了,特别是下周还需要进行考核,心中有点慌,只能用心将这三周的知识认真看懂了。

第三周学习总结和心得相关推荐

  1. 前三周学习Python的心得与感受

    还没有接触Python时,我以为这门语言会和C++有着天壤之别,但当我真正开始接触它时,才发现,Python与C++非常相似却又非常不同,刚上手时,Python给我的第一感受就是舒服,自我感觉它比C+ ...

  2. 第三周进步奖得主分享心得,带你一起快速上分!

    2019腾讯广告算法大赛初赛战场愈发火热,为了夺得复赛的入场券,选手们也各出奇招努力上分.小编也为大家及时送来第三周进步奖得主的心得分享,教你短期快速提分,顺利进入复赛战场! 关于赛题 数学问题 首先 ...

  3. 学号 20172326 《程序设计与数据结构》第三周学习总结

    学号 20172326 <程序设计与数据结构>第三周学习总结 教材学习内容总结 队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作 first与front相同,返回首段 ...

  4. 20165206 2017-2018-2 《Java程序设计》第三周学习总结

    20165206 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 类:class是关键字,用来定义类. 类声明:例如class People. 对象的声明:类 ...

  5. 20155117 王震宇 2006-2007-2 《Java程序设计》第三周学习总结

    20155117 王震宇 2006-2007-2 <Java程序设计>第三周学习总结 教材学习内容总结 在JAVA程序编写中,常常要用到对象(Object),要产生对象首先要定义类(Cla ...

  6. 2017-2018-1 20155338 《信息安全系统设计基础》 第三周学习总结

    2017-2018-1 20155338 <信息安全系统设计基础>第三周学习总结 教材学习内容总结 一.三种重要的数字表示 (1)无符号数.有符号数.浮点数 无符号编码是基于传统的二进制表 ...

  7. 20162316刘诚昊 《程序设计与数据结构》 第三周学习总结

    20162316刘诚昊 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 1. 查找是在一组数据中找到指定的目标元素或判定组内不存在目标的过程,常用方法为线性查 ...

  8. 2018-2019 20165227《信息安全系统设计基础》第三周学习总结

    2018-2019 20165227<信息安全系统设计基础>第三周学习总结 学习目标 理解逆向的概念 掌握X86汇编基础,能够阅读(反)汇编代码 了解ISA(指令集体系结构) 理解函数调用 ...

  9. 20155313 2016-2017-2 《Java程序设计》第三周学习总结

    20155313 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 4.1 类与对象 4.1.1 定义类 书本中使用了设计衣服来定义类,一件衣服的设计Cloth ...

  10. 20165105第三周学习总结

    20165105第三周学习总结 最开始我的Ubuntu是在VBox下,但是不知道怎么回事一直做不到增强功能,现在换了VMwear虚拟机就可以了,我从高一开始打字就用双拼了,Ubuntu中自带的双拼输入 ...

最新文章

  1. LeetCode简单题之托普利茨矩阵
  2. 怎么自学python软件-你是如何自学 Python 的?
  3. 接口 类型转换 try-catch(学习笔记)
  4. MySQL 去除重复的方法
  5. 介绍TCP/udp比较好的博客
  6. 单元测试 | 如何在Mock时匹配匿名类型参数
  7. C++学习笔记系列一
  8. Android笔记 - android 类型转化错误
  9. 一文掌握 Linux 性能分析之网络篇(续)
  10. Dreamweaver 制作图片热点之后,点击热点部分会有个提示框,怎么去掉
  11. spring源码:idea搭建源码环境
  12. 2021系统分析师论文题目记忆
  13. DirectShow 简介
  14. 关系图谱在风控体系的应用与实践
  15. 深圳西丽车管所科目二驾考攻略
  16. 最先进的智能采茶机器人_采茶机器人、挑茶机器人、智能立体仓储系统等这些在常人眼中颇具科幻气息的设备-新闻头条5dainban...
  17. 【Java实现导出Word文档功能 XDocReport +FreeMarker】
  18. 蓝牙耳机无法打开计算机,电脑搜不到蓝牙耳机怎么回事_电脑搜不到蓝牙耳机的处理方法【图文】...
  19. ARM态度暧昧,愤怒的华为或投入Risc-V怀抱
  20. 《人性的弱点》第一章 待人接物的三大原则:读后感

热门文章

  1. NERO刻录ISO镜像图解教程
  2. 【YOLOV5-5.x 源码解读】google_utils.py
  3. 网络会议openmeetings下的openmeetings-util文件分析7
  4. win2008搭建文件存储服务器,Win2008文件服务之SAN存储管理器入门
  5. DH加密通信python实现
  6. 免证书发布ipa文件真机测试
  7. 计算机网络(自我学习)
  8. dubbo服务端线程池耗尽Server side threadpool is exhausted
  9. git format-patch命令介绍
  10. 嵌入式Linux驱动笔记(四)------USB键盘驱动程序