gpt4 book ai didi

python - 在类中包装 pyvisa 设备

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:44 28 4
gpt4 key购买 nike

我正在开发一个 PyVISA 程序,该程序与功率分析仪和其他两个设备对话。我可以使用以下方法成功查询分析器:

import pyvisa
my_instrument = pyvisa.ResourceManager().open_resource('USB0::0x0B21::0x0025::39314C383030313939::INSTR')
print(my_instrument.query(':NUMeric:VAL?'))

我想这样包装:

import pyvisa
class YOKO( pyvisa.resources.usb.USBInstrument ):

def __init__(self):
pyvisa.ResourceManager().open_resource('USB0::0x0B21::0x0025::39314C383030313939::INSTR')

我在一个单独的文件中实例化类,并调用相同的查询 - 但无济于事。我经历了一些语法变体,但我不断收到错误:

AttributeError: 'YOKO' object has no attribute 'visalib'

有人知道我做错了什么吗?如何包装 PyVISA 设备?

最佳答案

1) YOKO的__init__的第一行调用USBInstrument的__init__。这样做应该注意将 visalib 设置为其预期值。 (参见:Why aren't Python's superclass __init__ methods automatically invoked?)

2) 我不建议对 pyvisa 工具进行子类化。相反,我会将 pyvisa 仪器对象实例化为您自己的仪器基类的属性(即使用封装而不是继承)。当您建立自己的乐器类集合时,会发生三件事:

A) 你会发现你想要稍微改变 pyvisa 方法的行为;例如,您可能想要配置自己的每个协议(protocol)的最小超时。您可以通过简单地覆盖方法来实现这一点,但是您可能会破坏依赖于 pyvisa 仪器未改变行为的调用代码。

B) 你会想出你自己的方法/属性名称,这些名称不小心踩到了 pyvisa 仪器方法; pyvisa 有很多这样的东西,它们的名字漂亮、直观,容易引起冲突。

C) 当您进入诸如协作仪器集或实时数据流之类的事情时,您会希望仪器具有不同数量的轻量级行为。基本上,您最终会得到超越单纯仪器 I/O 的语义和业务逻辑,并且很自然地将这些逻辑放入每个仪器对象中。如果您将实际的 pyvisa 仪器对象保留为您自己的仪器类的一个属性(如果需要,可以保持完全未初始化),您将有更多的自由来添加这些语义和逻辑。

第 2 项是非常主观的,但它是基于我过去几次沿着完全相同的道路走下去的经验:D

关于python - 在类中包装 pyvisa 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com