Python学习笔记(3)

Python学习笔记(3)

  • 面向对象编程是最有效的软件编写方法之一。在面向对象编程中,编写表示现实世界中的事物和情景,可以根据类来创建对象进行实例化。
  • 通过class [类名]定义类。类中的函数被称为方法,方法_init_()是一个特殊的方法,每当根据类创建新实例时,Python都会自动运行它。首尾处的下划线是一种避免与普通方法发生冲突的约定。
  • 为方法_init_()定义形参时,形参self必不可少,且必须位于其他形参之前,因为Python调用_init_()方法时,会自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例可以访问类中的属性和方法。以self为前缀的变量可供类中所有方法使用,也可以通过类的任何实例访问这些变量。
  • 类中的每个属性都必须有初始值,哪怕是数值0或者空字符串。修改属性的值可以通过实例直接访问来修改;也可以通过在类中定义方法来修改;还可以通过方法对属性的值进行递增而不将其设置为全新的值。

继承

  • 编写类的时候,并非总是从空白开始。如果要编写的类是另一个现成类的特殊版本,可以使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,新类称为子类。子类继承了父类的所有属性和方法,同时可以定义自己的属性和方法。
  • 通过class [子类]([父类])的方式使用继承。创建子类时,父类必须包含在当前文件中,且位于子类前面。子类内通过方法_init_()接受创建父类实例所需的信息。通过特殊函数super()帮助Python将父类和子类关联起来。
  • 让一个类继承另一个类之后,可以添加区分子类和父类所需的新属性和方法。也可以在子类中定义与父类方法同名的方法,对父类的方法进行重写。
  • 为了避免单个类的属性和方法过多显得杂乱,可以将一个大类分为多个协同工作的小类。将小类的实例作为大类的属性来使用,实现在大类中调用小类内的方法。

导入类

  • Python允许将类存储在模块中,然后在主程序中导入所需的模块。导入方式同模块导入方式。
  • Python标准库中有很多使用的模块可供导入。

文件和异常

文件

  • 函数open()接受文件名称作为参数以打开相应的文件,随后返回一个表示文件的对象。
  • 函数close()用来关闭文件,但容易因为程序的bug等原因导致close()不被执行,文件不被关闭。所以可以在函数open()前使用关键字with,使Python在文件不需要再被访问后自行将其关闭。方法read()读取文件的全部内容。
  • 文件路径有相对文件路径和绝对文件路径。因为不同操作系统对文件路径中斜杠的使用方式不同,可以使用os模块下的path()函数来构建文件路径。自Python3.5开始,引入了新的pathlib库,可以用更加面向对、更加统一的方式完成文件操作,利用pathlib库创建Path对象同样可以达到构建路径的效果。
  • 对文件对象使用for循环,可以每次一行地检查文件。还可以使用readlins()方法从文件中读取每一行,并将其存储在一个列表中。存储在列表后,就可以在with代码块外继续使用文件中的内容了。通过对列表内容的处理可以将其转换为字符串等其他格式。
  • 可以使用write函数写入文件,如需写入多行,可以添加换行符。文件的打开方式可以指定为读取模式('r')、写入模式('w')、附加模式('a')和读写模式('r+'),如果省略了模式实参,将以只读模式打开。

异常

  • Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示一个包含有关异常报告的traceback。
  • 异常是使用try-except代码块处理的。try-except代码块让Python执行指定操作并告诉Python发生异常时怎么办。使用了try-except代码块时,即便出现异常,程序也可以继续运行:显示预先编写好的错误信息(也可以失败时一声不吭地pass),而不是令用户迷惑的traceback。
  • 通过将可能引发错误的代码放在try-except代码块中,可提高程序抵御错误的能力。依赖于try代码块成功执行的代码块都应该放在else代码块中。

存储数据

  • 当用户关闭程序时,程序经常需要保存用户提供的信息,一种简单的方式是使用模块json来存储数据。模块json可以将简单的Python数据结构转存到文件中,且JSON数据格式可以同其他编程语言的程序进行分享使用。
  • json.dump()接受两个实参,即要存储的数据和用于存储数据的文件对象。json.load()则可以将对相应的文件对象进行读取。
  • 在存储练习中,尝试存储多组数据时(如分次存储多个用户名),程序报错。
    • 经检查json文件发现原因:存储数据的格式是字符串类型,如果不加处理,分次存储会存储为多个字符串,导致读取错误。
    • 解决方法:1、将多次输入存储到一个字符串中,这种方法局限较大(如数据读取后容易出现用户名误判),最好不用这种方法。2、更好的解决方法是存储为字典数据类型,这样也可以满足单次存储一组数据信息。

参考资料

原文地址:https://www.cnblogs.com/20145208cy/p/13111278.html