带有inheritan的python包

2024-10-03 06:24:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个论点是琐碎的,在很多文章中都有论述,但我读过,我仍然不清楚如何将文件夹中的内容视为包。。。 以这个例子为例(我知道有*rc文件会产生相同的结果..) 我已经定义了一个名为basequalityplot的基类,在这个基类中,我定义了在类名质量图中定制图(其中我定义了公共参数(稳定或变量)、更新rcParams)所需的所有东西,其中包含基类和更多…: 名为basequalityplot.py的完整类报告在:here

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

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,就像导入packjage一样。。但这行不通。。。。 有人能帮我吗


Tags: infromimportselfifmatplotlibnotkeys
3条回答

您需要在目录中创建一个(可能是空的)__init__.py

请注意,在Python中,没有要求或期望每个类都在自己的文件中,因此如果您只想在同一个文件中创建子类就可以了

另外请注意,参数的更好模式是定义一个默认字典,然后用kwargs中的任何内容更新它:

self.parameters = {
    'box': '#AAAAAA',
    'axeslabel': '#AAAAAA',
    'axes.linewidth': 0.7,
    'xtickcolor': '#AAAAAA',
    'ytickcolor': 'gray',
    ...
}
self.parameters.update(kwargs)

您需要通过告诉import在何处查找来“帮助”它:

import sys
sys.path.append("C:/path/to/your/qualityplot/folder")
import qualityPlot

应该有用。我用它来写放在不同地方的不同程序,但调用同一个公共库(主要是数学和图表方面的个人资料)

在Python中使用模块

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

在你的例子中

from basequalityplot import BasePlot

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

I would like to contain basequalityplot.py and qualityplot.py in the same directory (where qualityplot is the module that contain the class that I want use .. in this case I've report just the standard one)

I've tried to create a folder named qualityPlot

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

qualityPlot/
    __init__.py
    basequalityplot.py
    qualityplot.py

我希望import语句

from qualityPlot.qualityplot import BasePlot

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

相关问题 更多 >