我想知道如何设计一个不错的类来生成适合我目的的matplotlib图。
我想要获得的第一件事是一个可以如下调用的类,
但是我不知道如何设计这样的课程。
这是我要使用的方式:
fig,axs = MyClass(parameter...)
我该如何正确使用呢?
编辑非常感谢@ImportanceOfBeingErnest,您给了我一个很好的起点,我现在的问题是,因为您向我展示了如何将**参数传递给班级,您对此有何想法?例如,如何传递变量列表以便在ax1,ax2,ax3,ax4
中进行绘制?再次感谢您,您的帮助总是非常宝贵的
答案 0 :(得分: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
答案 1 :(得分: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所述,这是非常规的。