1、2.2 链表水果类类是现实世界或思维世界中的实体在计算机中的反映,用来描述具有相同的属性和方法的对象的集合,它定义了每个对象所共有的属性和方法。在 Python 中,对象用类创建。类被称为类对象,类的实例被称为类的对象。创建一个新类意味着创建一个新类型的对象,从而允许创建一个该类型的对象实例。每个类的实例可以拥有保存自己状态的属性和改变自己状态的、定义在类中的方法。类和实例举例:新建一个类对象“蔬菜”,里面可以有“白菜”、“青菜”、“西红柿”这些对象。类的定义Python 使用 class 关键字来定义类,其语法格式如下:类是抽象的,要使用类定义的功能,就必须进行类的实例化,即创建类的对象,其
2、语法格式为:对象名=类名(参数列表)。类中的属性类的数据成员是在类中定义的成员变量,用来存储描述类的状态特征的值,也称为属性。属性可以被该类中定义的方法访问,也可以通过类的对象进行访问。通过“self.变量名”定义的属性,称为类的对象属性,属于类实例化的特定对象。对象属性在类的内部通过“self.变量名”访问,在外部通过“对象名.变量名”来访问。类属性属于整个类,是在类中所有方法之外定义的变量,所有实例之间共享一个副本。类属性在类的内部通过“类名.类属性名”或“self.类属性名”访问,在外部可以通过类对象和实例对象访问公有的类属性,但不能访问私有的类属性。类的对象方法 类的对象方法对类的某个
3、实例化对象进行操作,一般以 self 作为其第一个形式参数(也可以使用其他名字)。声明对象方法的语法格式如下:方法的调用格式为:对象名.方法名(实 参 列表)。注意:虽然对象方法的第一个参数是 self,但是在调用时,用户不需要也不能给该参数传递值,Python会自动地把对象传递给 self参数。(拓展选学)链表类在python中没有指针,不能直接进行链表操作,但是python面向对象编程可以定义一个链表类来进行链表操作。在类中设定链表和节点的属性、方法,在后续的程序中可以直接运用。(1)单向链表的类定义通常使用两个类来协调表示单向链表,即单向链表的节点类(LinkNode)和单向链表类(Li
4、nkList)。先定义单向链表的节点类,代码如下:#定义节点类LinkNode#初始化节点包含两个区域self.data、self.next#self.data区域保存数据#self.next区域保存指针再定义单向链表类,代码如下:(2)单向链表节点的访问链表节点只能通过头指针(head)进行访问,其他节点通过节点间的指针依次访问。可以设计类的魔术方法_str_(),当使用 print()函数输出类对象的值时,会自动调用_str_()方法,依次输出链表的所有节点,代码如下:(3)单向链表节点的插入在链表中插入新节点时,无需移动链表中的元素,只要修改链表中节点指针域的值,就能高效地实现插入操作。
5、在单向链表插入新节点可能会出现三种情况,从表头插入、从中间插入或追加在表尾。当从表头插入时,可以设计类的方法 prepend(),代码如下:当从表尾插入时,可以设计类的方法 append(),代码如下:当从表中间插入时,可以设计类的方法 insert(),代码如下:(4)单向链表节点的删除单向链表中元素的删除比较简单。若要删除节点号为 index 的节点,则只需找到其前驱节点,修改前驱节点的 next指针指向其后继节点。当 index 越界时删除尾节点;若删除了头节点,则需要修改头指针。可以设计类的方法 pop(),代码如下:练一练1.已知学生类的定义如下:Class student:def
6、_init_(self,name,age_=18,sex_=“女”):self.name=name self.age=age_ self.sex=sex_ def _str_(self):return f”姓名:self.name,年龄:self.age,性别:self.sex”下列代码段定义了一个学生类的实例a,并输出其值:a=student(”王丽”,”16”)print(a)则执行该段程序后,程序输出的值为:A.姓名:王丽,年龄:16,性别:B.姓名:王丽,年龄:18,性别:女C.姓名:王丽,年龄:16,性别:女D.姓名:王丽,年龄:18,性别:女C2.已知单向链表类的定义如下:class linklist:def _init_(self):self.head=None则不带头节点的单向链表a为空的判定条件为A.self.head is NoneB.self.head is not NoneC.self.head.next is None D.self.head.next is not NoneA谢 谢