我想保留一个将定期获取温度读数的温度探测器列表。我想将创建温度探测器对象的每个实例所需的参数存储在列表中。然后,我想从此列表列表中创建每个实例,并使用每个嵌套列表的索引0命名每个对象。
例如,我希望使用其相应的参数创建实例Probe1,Probe2和Probe3。然后,我想从列表中的每个探针获取温度读数。
我希望能够添加无限的探针,而不必在一行中更改代码。
我遇到的问题是当我尝试使用Probe1,Probe2或Probe3 python做任何事情时,它们告诉我它们不存在。我是编程新手,所以我肯定缺少明显的东西。
class max31865(object):
def __init__(self, name, R_REF, csPin):
self.name = name
self.R_REF = R_REF
self.csPin = csPin
def readTemp(self):
#code here to check temp
probe_list=[["Probe1", 430, 8],["Probe2", 430, 9],["Probe3", 430, 10]]
for probe in probe_list:
x = str(probe[0])
x = max31865(*probe)
for probe in probe_list:
readTemp(probe[0])
答案 0 :(得分:1)
我不确定您到底想要什么,但是根据您的问题,这是两个可能的用例:
最简单的方法是将可迭代的拆包运算符(*
)与list comprehension结合使用:
probe_list = [["Probe1", 430, 8],["Probe2", 430, 9],["Probe3", 430, 10]]
probe_obj_list = [max31865(*probe) for probe in probe_list]
现在,您可以在列表中的每个对象上调用readTemp()
,如下所示:
probe_obj_list[1].readTemp() # Read the temperature of the second object
或者循环执行:
for probe in probe_obj_list:
probe.readTemp()
考虑使用dictionary(也称为地图)。
probe_list = [["Probe1", 430, 8],["Probe2", 430, 9],["Probe3", 430, 10]]
probe_obj_map = {probe[0] : max31865(*probe) for probe in probe_list} # Dict comprehension
现在,您可以按如下名称访问探针对象:
probe_obj_map["Probe1"].readTemp() # Accessing the object mapped to by the string "Probe1"
如果您需要遍历probe_list
并按名称查找对象,则可以(尽管我不确定为什么需要这样做):
for probe_args in probe_list:
probe_obj_map[probe_args[0]].readTemp() # Access the object mapped to by the first argument of the nested list (i.e. the name)
答案 1 :(得分:0)
代码更正:
class Max31865(object):
def __init__(self, name, R_REF, csPin): # missing `:` here
self.name = name
self.R_REF = R_REF
self.csPin = csPin
def read_temp(self):
# code here to check temp
# print the object's attributes or do anything you want
print('Printing in the method: ', self.name, self.R_REF, self.csPin)
probe_list=[["Probe1", 430, 8],["Probe2", 430, 9],["Probe3", 430, 10]]
for probe in probe_list:
# x = str(probe[0]) # probe[0] already is str
x = Max31865(*probe) # Here x is instantiated as `Max31865` object
print('Printing in the loop: ', x.name, x.R_REF, x.csPin)
x.read_temp() # Then call the `read_temp()` method.
# for probe in probe_list:
# readTemp(probe[0])
# This loop is confusing, just as @RafaelC noted in comment,
# 1. `readTemp` is a *method* of `Max31865` object, not a function you can call directly.
# 2. `readTemp` has no argument in it's definition, and you are giving one.