【问题标题】:Is there a smart way to pass a class variable using a function?有没有使用函数传递类变量的聪明方法?
【发布时间】:2022-07-12 01:59:33
【问题描述】:

我有一个类来组织包含多个变量的数据集。我读入了多个我想比较的数据集,所以我想创建一个函数,如果可能的话,它将一个类变量作为参数。目前我有下面的设置,我认为应该可以工作,但我想知道是否有更优雅/pythonic 的方式来解决它?

import numpy as np
import matplotlib.pyplot as plt

class MyClass:
    def __init__(self, input=None):
        _tmp = np.genfromtxt(input)
        self.var1 = _tmp['f0']
        self.var2 = _tmp['f1']
        self.var3 = var1 + var2
        self.var4 = var1 * var2

    def var(self, v='var1'):
        if v=='var1':
            return self.var1
        if v=='var2':
            return self.var2
        if v=='var3':
            return self.var3
        if v=='var4':
            return self.var4

def plot_MyClass(data1, data2, var='var1'):
    plt.plot(data1.var(var), data2.var(var), 'k-')
    return

###########

data1 = MyClass(file1.txt)
data2 = MyClass(file2.txt)
plot_MyClass(data1, data2, var='var3')
plt.show()

【问题讨论】:

  • def var(self, v='var1'): 有什么意义??为什么不只是data.var1data.var2
  • 你可以使用getattr(self, v),但是你应该首先考虑是需要4个单独的实例属性,还是一个dict-valued属性。

标签: python numpy class matplotlib


【解决方案1】:

使用字典简化它。不需要特殊的魔法:

import numpy as np
import matplotlib.pyplot as plt

class MyClass:
    def __init__(self, input=None):
        _tmp = np.genfromtxt(input)
        self.var = {}
        self.var['var1'] = var1 = _tmp['f0']
        self.var['var2'] = var2 = _tmp['f1']
        self.var['var3'] = var3 = var1 + var2
        self.var['var4'] = var4 = var1 * var2
        # And so on...use varX variables from above if needed...

def plot_MyClass(data1, data2, var='var1'):
    plt.plot(data1.var[var], data2.var[var], 'k-')
    return

###########

data1 = MyClass('file1.txt')
data2 = MyClass('file2.txt')
plot_MyClass(data1, data2, var='var3')
plt.show()

请注意,构造函数中的var1var2 等只是局部变量,可以更轻松地为不同的绘图变量构建表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多