**特点:**封装、继承、多态
语法格式如下:
class ClassName: <statement-1> . . . <statement-N>类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。
类对象支持两种操作:属性引用和实例化。
属性引用的标准语法:obj.name。
类对象创建后,类命名空间中所有的命名都是有效属性名。
class MyClass: """一个简单的类实例""" i = 12 def f(self): return 'hello world'# 实例化类x = MyClass()# 访问类的属性和方法print("MyClass 类的属性 i 为:", x.i)print("MyClass 类的方法 f 输出为:", x.f())# 以上创建了一个新的类实例并将该对象赋给局部变量 x,x 为空的对象# 结果MyClass 类的属性 i 为: 12MyClass 类的方法 f 输出为: hello world类有一个名为__init()__的特殊方法(构造方法)也称为初始化方法,该方法在类实例化时会自动调用,像下面这样:
def __init__(self): self.data = []类定义了 init() 方法,类的实例化操作会自动调用__init__()方法。如下实例化类 MyClass,对应的__init__()方法就会被调用:
x = MyClass()当然,__init__()方法可以有参数,参数通过 __init__() 传递到类的实例化操作上。例如:
class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpartx = Complex(3.0, -4.5)print(x.r, x.i) # 输出结果:3.0 -4.5类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,默认它的名称是 self。
self 是一个惯用的名称,用于表示类的实例(对象)自身。它是一个指向实例的引用,使得类的方法能够访问和操作实例的属性。示例如下:
class MyClass: def __init__(self, value): self.value = value def display_value(self): print(self.value)# 创建一个类的实例obj = MyClass(42)# 调用实例的方法obj.display_value() # 输出 42# 在上面的例子中,self 是一个指向类实例的引用,它在 __init__ 构造函数中用于初始化实例的属性,也在 display_value 方法中用于访问实例的属性。通过使用 self,你可以在类的方法中访问和操作实例的属性,从而实现类的行为。在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
#类定义class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age))# 实例化类p = people('python',10,30)p.speak()# 结果python 说: 我 10 岁。派生类的定义如下所示:
class DerivedClassName(BaseClassName): <statement-1> . . . <statement-N>子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法,示例如下:
#类定义class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age))#单继承示例class student(people): grade = '' def __init__(self,n,a,w,g): #调用父类的构函 people.__init__(self,n,a,w) self.grade = g #覆写父类的方法 def speak(self): print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))s = student('ken',10,60,3)s.speak()# 结果ken 说: 我 10 岁了,我在读 3 年级多继承暂且不讲。
open() 方法用于打开一个文件,并返回文件对象。
在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
**注意:**使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
完整的语法格式为:
open(file, mode='r', encoding=None, buffering=-1, errors=None, newline=None, closefd=True, opener=None)# 现在都用 with open(file, mode='r',encoding='utf-8') with语句自动关闭文件,无需手动调用close()参数说明:
mode参数:
默认为文本模式,如果要以二进制模式打开,加上 b 。
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数。
读取类:
read(size=-1) | size 则读取对应长度的字符(文本模式)或字节(二进制模式) | size=-1 是默认值(读取全部);2. 读取后文件指针会移动到读取末尾;3. 大文件慎用(占用内存) |
readline() | "";2. 适合处理大文件;3. 返回结果包含行尾的 \n 换行符 | |
readlines() | \n);2. 可配合 enumerate() 遍历行号和内容 |
写入类:
write(string) | \n;2. 'w' 模式会覆盖原有内容,'a' 模式追加在末尾 | |
writelines(sequence) | \n;2. 仅写入字符串,非字符串需先转换 | |
flush() | close() 和 with 语句会自动调用;2. 特殊场景(需立即持久化内容)下手动使用 |