Python学习笔记之类(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012561176/article/details/82011438

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语句的程序中, 这种做法让人更容易明白程序使用的各个模块都来自何方。

猜你喜欢

转载自blog.csdn.net/u012561176/article/details/82011438