05面向对象高级编程

__slots__限制实例的属性,如只允许对Student实例添加name和age属性

classStudent(object):

     __slots__ = ('name','age')# 用tuple定义允许绑定的属性名称

日志:

使用logging模块,程序打印完错误信息后会继续执行,并正常退出;

logging的好处,它允许你指定记录信息的级别,有debug,info,warning,error等几个级别

import logging

def foo(s):

    return 10/ int(s)

def bar(s):

    return foo(s) *2

def main():

    try:

        bar('0')

    except Exception as e:

        logging.exception(e)

单元测试:

编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。

以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。

对每一类测试都需要编写一个test_xxx()方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。最常用的断言就是assertEqual(),self.assertEqual(abs(-1),1), 抛出指定类型的断言:

with self.assertRaises(KeyError):

    value = d['empty']

with self.assertRaises(AttributeError):

    value = d.empty

setUp()和tearDown()方法

文档测试

import doctest 

doctest.testmod()

IO编程

with open("", 'rw') as f:

    print(f.read())

    f.write('Hello')

    f.close()

StringIO和BytesIO是在内存中操作str和bytes的方法,使得和读写文件具有一致的接口。

>>> from io import StringIO

>>> f = StringIO()

>>> f.write('hello')

操作文件和目录

import os

os.path.split() 把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名

os.path.splitext()可以直接让你得到文件扩展名

os.path.join('/Users/michael','testdir') 在某个路径下创建一个新的文件夹

os.listdir('./') 列出dir

你可能感兴趣的:(05面向对象高级编程)