面向对象
Python中类的定义以及对象的创建
所有的类默认全部继承object类,如果继承其他的类,则需要在类名后面添加括号,括号中填写父类名.
self参数:所有的实例方法(通过对象调用的方法)定义时必须以self作为第一个参数
self.some_property:实例属性
类属性不加self,而且不能定义在__init__()中。
对象在创建的时候首先调用__init__()函数
1 | class DemoClass: |
调用过程如下:
1 | my_class = DemoClass('lzx', '21') # 首先实例化一个对象 |
调用实例方法时不需要写self,在通过点调用的时候,已经隐式的把self规定为类的名字了
几种特殊方法
构造方法:在创建对象时会被自动调用
静态方法:使用@staticmethod修饰器来修饰,可以直接用类名或实例名调用,不能访问类的属性和方法。适用于逻辑上和类有关但是实际上和整个类关系不大的函数
1 | class DemoClass: |
类方法:使用@classmethod来修饰。第一个参数必须是cls,代表的是类本身。里面的参数只能是类属性,而不是实例属性
1 | class DemoClass: |
实例的权限比类大,所以说实例可以调用实例方法和类方法还有静态方法,而类名只能调用类方法和静态方法,但是如果传入了实例来当作self的参数的话,也是可以通过类名来调用实例方法的
面向对象-继承
通过继承,子类能立即获得父类的属性和方法,达到代码复用的目的,提高代码重用性,例如:
1 | class Car: |
当Python中出现集成的情况时,一定注意__init__()函数,如果子类没有定义自己的初始化函数,则会默认调用父类的初始化函数,所以在构造子类的时候也只能传入父类的初始化函数要求的参数
如果子类自己定义了初始化函数,如果没有显式的调用父类的初始化方法,则父类初始化方法不会被调用,则是用子类的方法覆盖了父类的方法。所以父类的所有属性和方法都消失了。
显式调用父类方法如下:
1 | super().__init__() |
面向对象-继承重写
如果子类的方法和父类的同名方法逻辑不一样,则需要在子类中重写父类的方法,子类的方法会覆盖父类的同名方法。
文件读取
常用的文件读取方法
1 | file = open('filename.txt', mode) # 后面的参数规定了读写,默认为‘r’,即读模式;写模式为'w' |
可以使用with(上下文管理器,用完之后自动回收,不需要close了),例如:
1 | with open(r'D:\someplace\somefile.txt') as f: |
文件写入
使用 file_obj = open(‘filename.txt’, ‘r’),以写模式打开文件,在使用file.write()和file.writelines()来写入,前者写入一句,后者写入某个列表的全部内容(会自动换行)
每次通过w模式写入文件,以前的文件内容全部清空!
写入多行:writelines(列表),将列表中的每一项写入文件,自动换行
如果以写模式打开不存在的文件,不会报错而是自动生成该文件,如果使用读方式则会报错