文章目录
这节课主要内容讲的是自定义一个类。
1. 自定义类
自定义类异常
官方文档:Handling Exceptions
其实就是新建一个Exception的子类。Exception这个类是python自带的。
- 自定义的类
[27]是新建的Exception子类。
[28]raise一下这个异常类,括号中是提示信息。
[29]是出现异常时打印的信息,最后一行就是[28]刚刚传进去的字符串。
如果[28]的括号什么都不写,就什么都没有。
2. 试了试,括号里的不一定是字符串,应该只要是合法字符就可以。
3. 正常使用
4. 只打印传进去的参数
类的继承
- 和前面一样,就是在类的括号里加上父类名字。
如图:
[79]的test1没有继承任何东西,所以[80]调用base的时候,父类是Object.
[79]的test2继承了test1,所以test2可以调用test1的类方法。[81]调用base的时候,可以看到其父类是test1
- 把test1中的类方法重载一下。
2.类属性
- 正常情况下没啥可说的,就正常使用。
- 在类外面添加属性
果然,我读的书还是太少了,类属性居然可以这样加。。。
这是要把C++的类和matlab的struct完美结合起来吗????
- 删除类属性
不仅能添加,还能删除。。。。
3. __repr__ 和 __str__
__repr__
官方文档:object.repr
前一篇文章已经讲过str了,在文章的最下面。链接在这里:对象
- 返回值必须是字符串
- 如果有自定义(重载)这个函数,则返回自定义的字符串
- 如果没有重载这个函数,则返回对象的地址
repr函数
官方文档:repr
用来检验__repr__函数的
- 调用类的__repr__函数,会输出一个字符串。
- 自定义__repr__和__str__
4. 检验repr和str的效果
话不多说,直接上结果,自己看。
橙色是repr函数的,蓝色是str函数的。
repr和str同时存在
仅定义repr
仅定义str
5. 小练习
List的__getitem__和__len__
一个类属性的值是另一个类实例
类的嵌套
咋说,套娃吧。
isinstance函数检验是不是某个类的实例
因为test2是继承的test1,所以可以看到:A的类型是test2,但既是test2的实例,也是test1的实例。
创建一个二元素集合的类
- 继承了Set这个父类。
- 有两个元素:a, b
- 重载了contains, len, iter的类方法。
原来集合的迭代取值是用yield输出的。。。难怪集合的输出可能乱序。
6. 函数传参
用 * 传递可变参数
- 正常使用, 默认参数放在可变参数后面
- 其他参数不能放在可变参数后面, 会被识别到可变参数内
*的特殊作用
- 函数的参数列表里有star,但是不传递任何参数。这种情况下,直接调用函数的时候会报错。
- 好处:强制用户输入参数对应的值,不然就报错。