Характер ошибки вы получаете просто потому, что вы не можете иметь класс наследует от обоих «объекта» и matplotlib.pyplot
- но их, pyplot является модуль - То есть: экземпляр класса «ModuleType», и нет смысла пытаться увеличить его с наследованием.
Вы могли бы увеличить pyplot с простыми заданиями атрибутов:
import matplotlib.pyplot
def my_new_plot_function(...):
...
matplotlib.pyplot.new_func = my_new_plot_function
и ваша новая функция будет доступна для других модулей, использующих модуль pyplot. Однако, как указано в комментариях, нет необходимости делать это - и это определенно нежелательно с архитектурной точки зрения. Вы даже можете заменить одну из существующих функций или классов в модуле pyplot, делая это - это называется патчем для обезьян - и вы обнаружите, что это будет крайне ненадежным, если вы действительно не знаете, что делаете, и даже в этом случае плохо поддерживаемы , и неясной особенностью в вашей системе в целом.
Теперь есть классы внутри модуля Pyplot - вы можете наследовать их и улучшать их поведение - и вы импортируете унаследованные классы в свой код из своего собственного модуля. Возможно, наследование - это не лучший способ добавить свое поведение в современный код (предпочтительным является агрегация и проксирование необходимых методов), но это сработает.
Классы, которые могут быть подклассы являются:
>>> [obj for obj in dir(pyplot) if isinstance(getattr(pyplot, obj), type)]
['Annotation', 'Arrow', 'Artist', 'AutoLocator', 'Axes', 'Button', 'Circle', 'Figure', 'FigureCanvasBase', 'FixedFormatter', 'FixedLocator', 'FormatStrFormatter', 'Formatter', 'FuncFormatter', 'GridSpec', 'IndexLocator', 'Line2D', 'LinearLocator', 'Locator', 'LogFormatter', 'LogFormatterExponent', 'LogFormatterMathtext', 'LogLocator', 'MaxNLocator', 'MultipleLocator', 'Normalize', 'NullFormatter', 'NullLocator', 'PolarAxes', 'Polygon', 'Rectangle', 'ScalarFormatter', 'Slider', 'Subplot', 'SubplotTool', 'Text', 'TickHelper', 'Widget', 'silent_list']
* «Я хочу, чтобы расширить свой класс питона с модулем pyplot из Matplotlib» * - почему? Что вы пытаетесь достичь здесь? – jonrsharpe
Я хочу расширить модуль pyplot несколькими функциями, которые я часто использую с pyplot. –
Итак, опять же, почему вы хотите унаследовать его? Почему бы просто не создать собственный модуль, который импортирует «pyplot» и определяет дополнительную функциональность, которую вы хотите? – jonrsharpe