python - 如何将局部变量动态添加到动态创建的 Python 类方法中

标签 python class

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

最佳答案

所以,这是我想出来的:

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

关于python - 如何将局部变量动态添加到动态创建的 Python 类方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42337455/

相关文章:

c# - 为什么类成员变量的值会改变?

python - 使用 Python over Apache 通过 HTTP 将文件推送给用户时文件名错误

python - 如何使用 for 循环删除多个全局分配的列表?

python - 在python中导入图像

python - 有两个不同的处理程序用于在 python 日志模块中进行日志记录

c++ - 类成员函数参数列表是否可能依赖于模板参数?

python - session.add_all(rows) 之后的 Sqlalchemy session.rollback()

html - 滚动条着色中的 CSS 问题

C++14 operator << 用于流插入和枚举类

ruby - 包含一个模块来定义动态类方法