【问题标题】:How can I dynamically add local variables to dynamically created Python class methods如何将局部变量动态添加到动态创建的 Python 类方法中
【发布时间】:2017-07-09 07:30:28
【问题描述】:

我正在创建用于 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 的内容。我想我可以将原始字符串作为属性添加到类中(命名类似于方法)并在方法中动态解析它们,但为此,方法能够根据它们的名称(或其他东西)检索类属性)。

【问题讨论】:

标签: python class


【解决方案1】:

所以,这就是我想出来的:

>>> 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__,为文本文件中的每个命令字符串添加一个方法到类,我可以编写一个通用方法来解析参数并为实际查询构建命令字符串。

【讨论】:

    猜你喜欢
    • 2013-09-04
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2011-03-30
    • 2014-05-20
    • 2016-09-19
    相关资源
    最近更新 更多