如何在Python 2.7中动态构造函数的内容?

如何在Python 2.7中动态构造函数的内容?,python,function,Python,Function,我遇到过许多文章,它们并没有完全说明我正在尝试做什么。我希望这不是一个重复的问题 我正在编写一个Python脚本,它与我的PC之外的几个真实世界的对象进行接口。我已经编写了包含与这些对象进行接口所需的函数的类。我还成功地编写了一个函数,它的风格不是很面向对象,它实例化了这些类的实例,从中获取数据,并将其保存到CSV文件中。一切正常。我被绊倒的地方是试图使函数更具适应性,这样我就不必每次添加另一个类实例或从预先存在的实例获取不同的数据点时都重新编写它 我尝试的方法是创建一个列表,其中包含类实例的名

我遇到过许多文章,它们并没有完全说明我正在尝试做什么。我希望这不是一个重复的问题

我正在编写一个Python脚本,它与我的PC之外的几个真实世界的对象进行接口。我已经编写了包含与这些对象进行接口所需的函数的类。我还成功地编写了一个函数,它的风格不是很面向对象,它实例化了这些类的实例,从中获取数据,并将其保存到CSV文件中。一切正常。我被绊倒的地方是试图使函数更具适应性,这样我就不必每次添加另一个类实例或从预先存在的实例获取不同的数据点时都重新编写它

我尝试的方法是创建一个列表,其中包含类实例的名称和从这些实例中获取数据的特定函数名。然后我将这个列表传递给另一个函数。另一个函数理想情况下会为我的CSV文件创建一个头文件(以便更容易解释数据),然后继续收集数据

伪代码:

inst1 = my_class_1()
inst2 = my_class_2()
filename = 'fubar.csv'
control_list = ['inst1', 'value1', 'inst2', 'value']

my_fucntion(filename, control_list):
# Code to create a header for CSV file in the form inst1-value1, inst2-value2
# Loop to control the number of times to grab data
    # Code which iterates control_list and builds up things like inst1.value1(), inst2.value2(),
    # etc. and then appends the results to a list
    # write results list to filename
如果我将control_list的所有元素作为字符串传递到我的函数中,我可以轻松地为结果文件生成头文件,但我不知道如何获取这些字符串并生成类似
inst1.value1()
的内容,以便Python访问我类中的函数。我认为,如果我像
[inst1.value1(),inst2.value2()]
那样创建列表,我可以从类中获取数据,但我不知道如何以这种方式创建头文件


如果我上面概述的方法不起作用,我愿意接受其他方法。

我最近遇到了一个类似的问题,并使用
namedtuple
来解决它

value1 = 'value of 1'
value2 = 'value of 2'
ControlList = namedtuple("ControlList", "inst1, inst2"))
controllist = ControlList(value1, value2)

>>> print controllist.inst1
... 'value of 1'
>>> print controllist.inst2
... 'value of 2'
value1和value2不需要是字符串,它们甚至可以是实例类或非实例类


以这种方式编写ControlList的好处是,您始终可以扩展控件列表,并且不会中断依赖于ControlList为特定长度或在特定位置具有特定值的函数。您始终可以通过.method绑定访问ControlList中的项,如果您不想弄乱代码,可以在函数内部使用别名
ControlList.method

我想您正在寻找函数:

class MyClass(object):
    def __init__(self, value1):
        self.value1 = value1

instance = MyClass("example")
fieldname = "value1"
fieldvalue = getattr(inst1, fieldname)
# fieldvalue == "example"

使用
getattr
setattr
可以编写代码来处理字段,这些字段的名称可以作为参数传递给函数。

借助oops概念,您可以轻松完成这项工作,而无需使用其他python预定义函数

类MyClass(对象): definit(自身,值1): self.value1=value1

inst=MyClass(“示例”)

获取属性的值 仪器价值1

设置属性的值
inst.value1=“hello”

传入字符串而不是类本身有什么原因吗?然后你可以实例化这个类,不管传入什么类。我可能没有把伪代码说清楚。我正在尝试通过类的实例。我希望能够访问这些实例的名称(作为数据头的字符串),并访问这些实例的方法以获取数据。传递字符串只是我尝试过的一件事,这样我就可以轻松地创建标题。我曾希望使用这些字符串访问实例上的方法。正如我之前所说,我对其他方法持开放态度。这似乎很有希望,但基于你的例子,我不太明白如何将其应用于我的情况。我需要对namedtuple进行更多的研究,以确定如何使用它,或者是否可以使用它。