如何向动态创建的Python类方法动态添加局部变量

2024-03-28 02:41:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建用于pyvisa的工具类。与手动将每个SCPI命令(大约400个)转换为方法不同,我只想将命令快速引用复制到文本文件中,并使用如下命令:

[SENSe:]TEMPerature:TRANsducer:RTD:RESistance[:REFerence]? [{MIN|MAX}]

以如下方式结束:

def temp_tran_rtd_res_qry(*args):
    <check for valid arguments>
    cmd = 'TEMPerature:TRANsducer:RTD:RESistance?'
    argstr = ''
    for arg in args:
        argstr += ' ' + arg
    return self.query(cmd + argstr)

我掌握了解析命令的方法,并且了解了如何使用setattr()从模板函数创建具有正确名称的方法。你知道吗

给我带来麻烦的是,每个方法都知道给cmd分配什么。我想我可以将原始字符串作为属性添加到类中(命名类似于方法),并在方法中动态解析它们,但为此,方法必须能够基于它们的名称(或其他内容)检索类属性。你知道吗


Tags: 工具方法命令名称cmdfor属性arg
1条回答
网友
1楼 · 发布于 2024-03-28 02:41:04

所以,我发现:

>>> class A(object):
    pass

>>> a = A()
>>> a.  # Only default 'object' methods avaliable
>>> cmdstr = '[SENSe:]VOLTage[:DC]:RANGe[:UPPer] {<range>|MIN|MAX|DEF} '
>>> querystr = """def query(cls, *args): cmd = '{s}'; return command_handler(*args, cmdstr=cmd)"""
>>> exec(querystr.format(s=cmdstr))
>>> setattr(A, command_name(command_abridge(cmdstr)), classmethod(query))
>>> a.volt_rang()    # Autocomplete works
<results from command_handler()>

我可以在__init__中编写一个文件解析器,为文本文件中的每个命令字符串向类中添加一个方法,还可以编写一个通用方法来解析参数并为实际查询构建命令字符串。你知道吗

相关问题 更多 >