如何定义一个类
知识点1:类=属性(数据)+方法(函数)
知识点2:用类创建对象——会默认调用__init__()方法
知识点3:通过对象调用类中的方法——self相当于C语言中的this指针
注意:传参的时候并不用传self,它负责把其他参数定位到所创建对象的地址。
类的继承
子类与父类,就像集合中的真子集与子集。
当子类没有自己的构造函数时,就会调用父类的构造函数(用于创建和初始化对象,也就是__init__()。)
对于其他方法,调用逻辑是优先看所属的类有没有该方法,没有的话往上找父类的同名方法使用。
当我调用父类构造方法的内容与我们需要的内容有不同,那就不能只写在父类中,可是如果写在子类中要么会重复,要么会只有该属性。此时,使用super()方法来解决——用来把一个方法的不同属性调用来源做分流,往往在继承父类方法时使用。
它会返回当前类(子类)的父类,告诉他哪些属性从父类调用,哪些使用子类的。
知识点1:如何继承——在类后面加上()
知识点2:理解super方法
对比两种写法:
super(哪些从子类调用LeNet, self).init()
super().init(要从父类继承哪些一样的)——适合知道要从父类继承哪些语句
为什么要有主函数的判断,何时要用?
一是清楚变量__name__的值
二是知道每个py文件都可以作为单独脚本运行,也可以被调用。
所以,为了防止输出时出现被调用文件的测试内容,主函数应该放在被调用的.py文件里。
当import xx找不到模块时,如何解决
出现此情况的原因,往往是Python解释器找不到xx的路径,也就是说需要手动给Python解释器添加搜索路径,如下:
当然还有一种极隐蔽的错误:若是所调用的模块名和某个脚本文件名正好相同,且该文件恰好在Python解释器的搜索路径范围内,程序运行也会报错。解决方法是:修改整个脚本的文件名。
如何使用日志来调试代码
提问的原则
1.想要做什么(不只是做了什么)
2.提示错误发生的具体信息(偶尔、总是)
3.把代码段或者整个复制出来
4.为解决这个问题做了哪些尝试
5.列出使用的Python版本、操作系统版本
查看程序执行的顺序及变量变化
1.可视化网站:pythontutor.com——查找错误
2.logging日志