Создание класса для сюжетов продукта

1

Мне было интересно, как создать хороший класс, чтобы создать график matplotlib, подходящий для моей цели. Первое, что я хочу получить, - это класс, который можно назвать следующим,
но я понятия не имею, как создать такой класс.

Вот как я хочу его использовать:

fig,axs = MyClass(parameter...) 

Как я могу правильно использовать это?

EDIT Большое спасибо @ImportanceOfBeingErnest, вы даете мне очень хорошую стартовую точку, теперь мой вопрос заключается в том, что вы показываете мне, как передать параметр ** классу, что вы думаете о том, как передать список переменных, чтобы быть построены в ax1,ax2,ax3,ax4 например? Еще раз спасибо, ваша помощь всегда очень ценна

Теги:
matplotlib

2 ответа

2
Лучший ответ

По существу, вы не можете или, по крайней мере, не должны. Возвращение класса должно быть экземпляром самого себя.

Однако вы можете назвать класс, например

import matplotlib.pyplot as plt

class MyClass():
    def __init__(self, **parameters):
        self.fig, self.axs = plt.subplots(**parameters)

    def __call__(self):
        return self.fig, self.axs

fig, axs = MyClass(figsize=(6,5))()

Недостатком этого является то, что вы напрямую теряете любой обработчик для созданного экземпляра класса. Это означает, что вышеупомянутое было бы намного проще записывать как функцию,

import matplotlib.pyplot as plt

def myfunction(**parameters):
    fig, axs = plt.subplots(**parameters)
    return fig, axs

fig, axs = myfunction(figsize=(6,5))

Поэтому для того, чтобы использование класса имело какой-либо смысл, вероятно, захочется его каким-то образом сохранить, а затем использовать его атрибуты или методы.

import matplotlib.pyplot as plt

class MyClass():
    def __init__(self, **parameters):
        self.fig, self.axs = plt.subplots(**parameters)

myclass = MyClass(figsize=(6,5))
fig = myclass.fig
axs = myclass.axs
2

Добавляя к другому ответу, вы также можете создать класс, который реализует функцию __iter__ которая эмулирует класс как кортеж, позволяя ему возвращать fig, axs:

class MyClass:
    def __init__(self, params):
        self.fig, self.axs = plt.subplots()
        # Do stuff here
    def __iter__(self):
        for e in (self.fig, self.axs):
            yield e

fig, axs = MyClass(params)

Однако это довольно неортодоксально, как описано @ImportanceOfBeingErnest.

  • 0
    Upvote за идею. Тем не менее, я бы не рекомендовал использовать эту концепцию в реальном приложении, так что «неортодоксальный» описывает ее достаточно хорошо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню