首页 > 解决方案 > 使用继承的python包

问题描述

我知道这个论点是微不足道的,并且在很多帖子中都得到了处理,但是我已经阅读了它,但我仍然不清楚如何将文件夹中的内容视为包...举这个例子(我知道有 *rc 文件产生相同的结果..) 我已经定义了一个名为的基类basequalityplot,我在其中定义了自定义绘图所需的所有东西(我在其中定义了共同点参数(稳定或变量),更新 rcParams )在类名质量图中,其中包含基类和更多...:名为 basequalityplot.py 的完整类报告在:这里

基本模块包含派生类......经常重复......我将只报告一个:

import sys
import os
import matplotlib
import matplotlib.pyplot as plt 
import numpy as np
from matplotlib.ticker import MultipleLocator, FormatStrFormatter 
from matplotlib.axes import Axes
from cycler import cycler
from matplotlib import cm
from collections import OrderedDict
from matplotlib.ticker import AutoMinorLocator
from basequalityplot import BasePlot

#######################################################################
#######################################################################

class Standard(BasePlot):

    def __init__(self,**kwargs):

        self.parameters = kwargs

        if 'box' not in self.parameters.keys():
            self.parameters['box'] = '#AAAAAA' 
        if 'axeslabel' not in self.parameters.keys():
            self.parameters['axeslabel'] = '#AAAAAA'
        if 'axes.linewidth' not in self.parameters.keys():
            self.parameters['axes.linewidth'] = 0.7
        if 'xtickcolor' not in self.parameters.keys():
            self.parameters['xtickcolor'] ='#AAAAAA' 
        if 'ytickcolor' not in self.parameters.keys(): 
            self.parameters['ytickcolor'] = 'gray' 
        if 'gridcolor' not in self.parameters.keys(): 
            self.parameters['gridcolor'] = 'gray' #'#AAAAAA' #'#dddddd'
        if 'font' not in self.parameters.keys(): 
            self.parameters['font'] = 'serif'
        if 'fontstyle' not in self.parameters.keys():
            self.parameters['fontstyle'] = 'italic'
        if 'fontsize' not in self.parameters.keys():
            self.parameters['fontsize'] = 10.0
        if 'legendfontsize' not in self.parameters.keys():
            self.parameters['legendfontsize'] =10.0
        if 'legendEdgeColor' not in self.parameters.keys():
            self.parameters['legendEdgeColor'] = '#AAAAAA' #'#dddddd'
        if 'scheme' not in self.parameters.keys():
            self.parameters['scheme'] = 'nb'
        if 'cycle' not in self.parameters.keys():
            self.parameters['cycle']  = self.cycle('0')
        if 'axes.linewidth' not in self.parameters.keys():
            self.parameters['axes.linewidth'] = 0.7
        if 'grid.dashes' not in self.parameters.keys():
            self.parameters['grid.dashes'] = (5,5)
        if 'grid.linestyle' not in self.parameters.keys():
            self.parameters['grid.linestyle'] = '--' 
        if 'linestyle' not in self.parameters.keys():
            self.parameters['linestyle'] = self.linestyles('paper')
        if 'cycle' not in self.parameters.keys():
            self.parameters['cycle'] = self.cycle('0')
        if 'grid.alpha' not in self.parameters.keys():
            self.parameters['grid.alpha'] = '1'
        if 'grid.linewidth' not in self.parameters.keys():
            self.parameters['grid.linewidth'] = 0.7


        self.parameters.update(kwargs)

        super().__init__(**self.parameters)

好吧......我想包含basequalityplot.pyqualityplot.py在同一个目录中(其中 qualityplot 是包含我想要使用的类的模块..在这种情况下我只报告了标准的)

我试图创建一个名为qualityPlot

然后从子目录中的脚本尝试import qualityPlot通常用于 import packjage .. 但这不起作用.. 有人可以帮助我吗?:(

标签: pythonmatplotlib

解决方案


在 Python 中使用模块

  • 确保__init__.py文件存在于目录中(注意下划线)
  • 请注意,文件夹名称和文件名都是模块的一部分
  • 确保 Python 会找到路径(比如使用 PYTHONPATH)

在你的例子中,

from basequalityplot import BasePlot

这期望在当前目录(或直接在 python 路径上的其他地方,或编译版本)中找到文件 basequalityplot.py。在该文件中,它期望找到类 BasePlot。

我想在同一个目录中包含 basequalityplot.py 和 qualityplot.py (其中 qualityplot 是包含我要使用的类的模块..在这种情况下我只报告了标准的)

我试图创建一个名为 qualityPlot 的文件夹

您在此处描述的内容与您的示例代码不太匹配。如果你有一个文件夹结构

qualityPlot/
    __init__.py
    basequalityplot.py
    qualityplot.py

我希望导入声明能够阅读

from qualityPlot.qualityplot import BasePlot

Python Tutorial 6.4 中有一个有用的例子 https://docs.python.org/3/tutorial/modules.html#packages


推荐阅读