Python允许你将类存储在模块中,然后在主程序中导入所需的模块。 此时就可以导入类。
1、导入单个类:
(1)、首先,新建一个person.py文件,里面定义Person类和__init__()方法一级其他方法,代码如下:
class Person():
"""Person类"""
def __init__(self,name,age,sex):
self.name = name;
self.age = age;
self.sex = sex;
def get_desc_info(self):
print("姓名为:" + self.name + ",年龄为:" + str(self.age) + ",性别:" + self.sex);
(2)、接着来导入这个Person类,由于Person类是来自person.py文件,所以导入的时候可以写为:from person import Person; import语句让Python打开模块person,并导入其中的Person类,新建一个person_test.py文件,具体代码如下:
from person import Person;
one_person = Person('林梓然',26,'男');
one_person.get_desc_info();
(3)、运行后如下图所示:
2、在一个模块存储多个类:
(1)、首先新建一个teacher.py文件,这个模块里面存储了多个类,比较主要的代码就为Teacher类底下的将Student的实例和Course的实例作为属性,代码如下:
class Course():
"""一个课程类"""
def __init__(self,teacher_name,stu_name,course_name):
self.techer_name = teacher_name;
self.stu_name = stu_name;
self.course_name = course_name;
def get_course(self):
print(self.techer_name + "正在教" + self.stu_name + "的课程是:" + self.course_name);
class Student():
"""一个学生类"""
def __init__(self,name,age,sex,major,number):
self.name = name;
self.age = age;
self.sex = sex;
self.major = major;
self.number = number;
def get_stu_info(self):
print("该学生姓名为:" + self.name + ",年龄为:" + str(self.age) + ",性别为:" + self.sex + ",专业为:" + self.major + ",学号为:" + self.number);
class Teacher():
"""一个教师类"""
def __init__(self,name,course):
self.name = name;
self.student = Student('林梓然',26,'男','软件工程','2012131739');
self.course = Course(name,self.student.name,course);
(2)、接着导入这个模块的Teacher教师类,实例化Teacher类,然后调用其实例Student和Course后的方法,新建一个teacher_test.py文件,代码如下:
from teacher import Teacher;
teacher = Teacher('刘老师','Python程序入门');
teacher.student.get_stu_info();
teacher.course.get_course();
(3)运行后如下所示:
3、从一个模块中导入多个类:
(1)、首先新建一个animal.py文件,里面包含多个类,作为一个模块,代码如下:
class Cat():
def __init__(self,yell,things):
self.yell = yell;
self.things = things;
def get_action(self):
print("猫的叫声是:" + self.yell + ",并且猫是吃:" + self.things);
class Dog():
def __init__(self,yell,things):
self.yell = yell;
self.things = things;
def get_action(self):
print("狗的叫声是:" + self.yell + ",并且狗是吃:" + self.things);
(2)、接着新建一个animal.py,导入上面的animal模块的两个类,代码如下:
from animal import Cat,Dog;
cat = Cat('喵喵喵','猫粮');
cat.get_action();
dog = Dog('汪汪汪','狗粮');
dog.get_action();
(3)、运行后如下所示:
4、导入模块中的所有类 ,要导入模块中的每个类,可使用下面的语法:
from module_name import *;
但是不推荐这种方式,第一:这样使用import的话,不知道我们到底导入的是模块的哪些类,这样不清楚。第二,可能会引发名称方面的困惑。如果你不小心导入了一个与程序文件中其他东西同名的类,将引发难以诊断的错误。如果我们需要导入一个模块中很多类的时候,最好导入整个模块。
5、在一个模块中导入另一个模块:
(1)、有时候,需要将类分散到多个模块中,以免模块太大,或在同一个模块中存储不相关的类。 将类存储在多个模块中时,你可能会发现一个模块中的类依赖于另一个模块中的类。在这种情况 下,可在前一个模块中导入必要的类。
(2)、首先,新建一个music.py文件,存放music模块,里面定义了一个Music类,代码如下:
class Music():
def __init__(self,author,musics,albums):
self.author = author;
self.musics = musics;
self.albums = albums;
def get_music_info(self):
print("音乐作者为:" + self.author)
for music in self.musics:
print("\t音乐:" + music);
for album in self.albums:
print("\t专辑:" + album);
(3)、接着,新建一个author.py文件,作为author模块,里面定义了一个Author类,并在这个模块里导入了上面的music模块,代码如下:
from music import Music;
class Author():
def __init__(self,author):
self.author = author;
self.music = Music(author,['遇见我','风吹过下雨天','认真的老去'],['遇见我','认真的老去']);
(4)、接着,新建一个author_test.py,测试代码运行效果,代码如下:
from author import Author;
author = Author("曹方");
author.music.get_music_info();
(5)、运行后如下图所示:
6、自定义工作流程:一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始时就尝试将类存储到模块中。先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序。
7、Python标准库,Python标准库是一组模块,安装的Python都包含它。可使用标准库中的任何函数和类,为此只需在程序开 头包含一条简单的import语句。下面来看模块collections中的一个类OrderedDict,它兼具列表和字典的主要优点(在将信息关联起来的同时保留原来的顺序)。代码如下:
from collections import OrderedDict;
musics = OrderedDict();
musics['林子祥'] = '分分钟需要你';
musics['林志炫'] = '蒙娜丽莎的眼泪';
musics['林志颖'] = '十七岁的雨季';
musics['林忆莲'] = '伤痕';
for author,music in musics.items():
print(author + "的一首好听的歌为:" + music);
运行后如下图所示:
8、类编码风格,注意下列几点:
(1)、类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
(2)、对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
(3)、可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
(4)、需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import语句,再添加一个空行,然后编写导入你自己编写的模块的import语句。在包含多条import语句的程序中, 这种做法让人更容易明白程序使用的各个模块都来自何方。