python入门基础(11)--类的导入、继承及使用
在上篇“python中的类的创建、使用和继承”中,创建了Person()和Student()两个类,最后才是程序执行主体,如下:
class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。 def __init__(self, name, age,hometown): #父类 self.name = name self.age = age self.hometown = hometown #属性hometown def get_name(self): #定义打印名字的一个方法(函数) """ print("The person'name is "+self.name.title()+'.') def get_age(self): #定义打印年龄的一个方法(函数) """ print("The person is "+str(self.age)+' years old.') def get_grade(self): #定义打印家乡的一个方法 """ print("The person is grade "+str(self.grade)) def play_game(self): #定义人游戏 """ print(self.name.title()+" is playing game with his friend !") def get_hometown(self): #定义打印学生家乡的一个方法 """ print("The person "+self.name.title()+" is froming "+self.hometown.title()) class Student(Person): #定义子类Student,必须在括号内指定父类的名称 def __init__(self, name, age,hometown): #方法 __init__()接受创建Person实例所需的信息 super().__init__(name, age,hometown) self.grade = 7 #设置为默认值 7 def do_homework(self): #定义学生的一个方法(函数),做家庭作业""" print(self.name.title()+" is doing his homework now !") def get_student_info(self): #定义学生的一个方法(函数),打印学生信息""" student_info = self.name.title()+' is '+str(self.age)+' years old, and from '+self.hometown +' and grade '+str(self.grade) print(student_info) def update_info(self,new_age,new_grade,new_hometown): #定义更新学生信息一个方法(函数)""" self.age = new_age self.grade = new_grade self.hometown = new_hometown new_student=Student("jack",13,'NewYork') new_student.get_student_info() #打印学生全部信息 print("\n") student_c=Student("Lily",14,'NewYork') student_c.get_student_info() #由于没有修改grade,打印出来为默认值 7 print("\n") #修改实例student_c中的grade student_c.grade=9 #修改自己的的属性grade为9 student_c.get_student_info() #打印学生全部信息
随着不断地给类添加功能,文件变得很长。为结构条理清晰,文件整洁,可读性增加。Python允许将类存储在模块中,然后在主程序中导入所需的模块,如同导入模块。
其中person.py文件中内容为:
class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。 def __init__(self, name, age,hometown): #父类 self.name = name self.age = age self.hometown = hometown #属性hometown def get_name(self): #定义打印名字的一个方法(函数) """ print("The person'name is "+self.name.title()+'.') def get_age(self): #定义打印年龄的一个方法(函数) """ print("The person is "+str(self.age)+' years old.') def get_grade(self): #定义打印家乡的一个方法 """ print("The person is grade "+str(self.grade)) def play_game(self): #定义人游戏 """ print(self.name.title()+" is playing game with his friend !") def get_hometown(self): #定义打印学生家乡的一个方法 """ print("The person "+self.name.title()+" is froming "+self.hometown.title())
student.py文件中的内容为:
from person import * class Student(Person): #定义子类Student,必须在括号内指定父类的名称 def __init__(self, name, age,hometown): #方法 __init__()接受创建Person实例所需的信息 super().__init__(name, age,hometown) self.grade = 7 #设置为默认值 7 def do_homework(self): #定义学生的一个方法(函数),做家庭作业""" print(self.name.title()+" is doing his homework now !") def get_student_info(self): #定义学生的一个方法(函数),打印学生信息""" student_info = self.name.title()+' is '+str(self.age)+' years old, and from '+self.hometown +' and grade '+str(self.grade) print(student_info) def update_info(self,new_age,new_grade,new_hometown): #定义更新学生信息一个方法(函数)""" self.age = new_age self.grade = new_grade self.hometown = new_hometown
mainframe.py文件中内容:
from student import * new_student=Student("jack",13,'NewYork') new_student.get_student_info() #打印学生全部信息 print("\n") student_c=Student("Lily",14,'NewYork') student_c.get_student_info() #由于没有修改grade,打印出来为默认值 7 print("\n") #修改实例student_c中的grade student_c.grade=9 #修改自己的的属性grade为9 student_c.get_student_info() #打印学生全部信息
student.py文件,mainframe.py文件中第一行 的from*** import * 语句 ,分别为打开模块person和student,并导入其中的Person类和Student类,同模块功能一样。
通过上述分块,将类移到一个模块中,并导入该模块,依然可以使用其所有功能,但主程序文件变得整洁而易于阅读。
二、多个类可以存放在一个模块文件中,例如,将上述的Person()类和Student()类放在同个文件中,
class Person(): #创建一个person类,父类必须包含在当前文件中,且位于子类前面。 def __init__(self, name, age,hometown): #父类 self.name = name self.age = age self.hometown = hometown #属性hometown def get_name(self): #定义打印名字的一个方法(函数) """ print("The person'name is "+self.name.title()+'.') def get_age(self): #定义打印年龄的一个方法(函数) """ print("The person is "+str(self.age)+' years old.') def get_grade(self): #定义打印家乡的一个方法 """ print("The person is grade "+str(self.grade)) def play_game(self): #定义人游戏 """ print(self.name.title()+" is playing game with his friend !") def get_hometown(self): #定义打印学生家乡的一个方法 """ print("The person "+self.name.title()+" is froming "+self.hometown.title()) class Student(Person): #定义子类Student,必须在括号内指定父类的名称 def __init__(self, name, age,hometown): #方法 __init__()接受创建Person实例所需的信息 super().__init__(name, age,hometown) self.grade = 7 #设置为默认值 7 def do_homework(self): #定义学生的一个方法(函数),做家庭作业""" print(self.name.title()+" is doing his homework now !") def get_student_info(self): #定义学生的一个方法(函数),打印学生信息""" student_info = self.name.title()+' is '+str(self.age)+' years old, and from '+self.hometown +' and grade '+str(self.grade) print(student_info) def update_info(self,new_age,new_grade,new_hometown): #定义更新学生信息一个方法(函数)""" self.age = new_age self.grade = new_grade self.hometown = new_hometown
导入同一文件模块中的多个类,可直接使用。从一个模块中导入多个类时,用逗号分隔了各个类,导入必要的类后,可根据需求,创建每个类的任意数量的实例。
from person import Person,Student
导入整个模块,再使用“模块名.类名” 表示法访问需要的类,如同使用实例的方法一样,如下图所示:
Python标准库是一组模块,安装的 Python 都包含它,可使用标准库中的任何函数和类,为此只需在程序开头包含一条简单的 import 语句
类、模块的命名规则:
1)类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。
实例名和模块名都采用小写格式,并在单词之间加上下划线。
2)定义类,后面包含一个简要地描述类的功能文档字符串,并遵循编写函数的文档字符串时采用的格式约定。
模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
3)可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;在模块中,可使用两个空行来分隔类。
4)同时导入标准库中的模块和自己编写的模块时,先导入标准库模块的 import 语句,再添加一个空行,再导入自己编写的模块的 import 语句,让人更容易明白程序使用的各个模块都来自何方