【发布时间】:2022-07-20 23:59:20
【问题描述】:
假设我已经定义了一个类并创建了几个实例:
A = MyClass()
B = MyClass()
现在假设我定义了一个my_plot 函数,该函数将MyClass 类的实例作为输入,例如我有类似以下内容:
def my_plot(X,Y):
# Do something and plot
plt.legend([?,??])
我可以用my_plot(A,B) 打电话。
我希望将上面伪代码sn-p的plt.legend([?,??])行中的?和??分别替换为A和B。
到目前为止,解决问题的一种方法是为MyClass 配备属性name 并执行类似的操作
A = MyClass('nameA')
B = MyClass('nameB')
然后
def my_plot(X,Y):
# Do something
plt.legend([X.name,Y.name])
但我发现用A = MyClass('nameA'), B = MyClass('nameB') 实例化一个类很无聊。我希望用A = MyClass(), B = MyClass() 实例化我的类,并在my_plot 函数中检索绘图的实例名称。
【问题讨论】:
-
你应该阅读例如nedbatchelder.com/text/names.html - 名称是标签,分配给它们的标识符(无论是无、一个或多个)不是实例的属性。也许使用字典,那么您可以使用键(名称)和值(实例)?
-
d = {'A': MyClass(), 'B': MyClass()}。现在d['A']和d['B']是您的参考,而不是A和B。更重要的是,名称现在是数据,而不是代码,并且可以传递给my_plot。
标签: python