问题解决:TypeError: unbound method X must be called with dictionary instance as first argument

本文详细解析了在使用Python的SSHLibrary时遇到的TypeError: unbound method错误的原因及解决方案。通常,该错误源于调用类方法时未正确实例化类。文章指导读者检查并修正代码中未添加括号的类调用,从而避免此类错误。

unbound 问题



TypeError: unbound method X must be called with SSHLibrary instance as first argument (got str instance instead)


栗子:


TypeError: unbound method open_connextion() must be called with SSHLibrary instance as first argument (got str instance instead)


原因

由于调用open_connextion()类时,没有添加括号,这种情况下,未被认为是类的实例,故报此错。

解决

查看你的代码,找到你调用的open_connextion()类,将其添加括号。


综上所述,当碰到unbound 问题时,就是你调用某一个类时没对其添加括号,找到此类并添加括号就能解决问题。

你遇到的错误是: ``` TypeError: file <maya console> line 9: unbound method getAOVNode() must be called with AOVInterface instance as first argument (got str instance instead) ``` ### 错误原因分析: 这个错误是因为你调用了 `aovs.AOVInterface.getAOVNode(aov_name)`,而没有正确使用 `AOVInterface` 类。`getAOVNode` 是一个 **实例方法**,而不是类方法,所以你必须先创建一个 `AOVInterface` 的实例,再调用它。 --- ### ✅ 正确使用方式: 你需要先实例化 `AOVInterface()`,然后通过这个实例来调用 `getAOVNode()` 方法。 --- ### ✨ 修改后的完整代码如下: ```python import maya.cmds as cmds import mtoa.aovs as aovs def create_aovs(aov_list): """ 创建指定的 AOV 列表,并自动连接到默认的驱动节点 """ aov_interface = aovs.AOVInterface() # 实例化 AOVInterface for aov_name in aov_list: if not aov_interface.getAOVNode(aov_name): # 使用实例调用方法 aov_interface.addAOV(aov_name) print("成功创建 AOV: {}".format(aov_name)) else: print("AOV {} 已存在".format(aov_name)) def connect_aov_drivers(): """ 确保 AOV 驱动节点存在,并将所有 AOV 自动连接到默认驱动节点 """ drivers = cmds.ls(type='aiAOVDriver') if not drivers: driver = cmds.createNode('aiAOVDriver', name='default_aovDriver') else: driver = drivers[0] aov_nodes = cmds.ls(type='aiAOV') for aov in aov_nodes: if not cmds.connectionInfo('{}.outputs'.format(aov), isDestination=True): cmds.connectAttr('{}.outputs[0]'.format(aov), '{}.inputs'.format(driver), nextAvailable=True) print("连接 AOV {} 到驱动节点 {}".format(aov, driver)) def create_aov_ui(): """ 创建一个简单的 UI 界面让用户选择 AOV 并创建 """ window_name = "aovToolWindow" if cmds.window(window_name, exists=True): cmds.deleteUI(window_name) window = cmds.window(window_name, title="Arnold AOV 分层工具", widthHeight=(300, 400)) cmds.columnLayout(adj=True) cmds.text(label="选择要创建的 AOV 层") aov_options = ['diffuse', 'specular', 'sss', 'transmission', 'direct', 'indirect', 'emission', 'volume'] global aov_checkboxes aov_checkboxes = {} for aov in aov_options: aov_checkboxes[aov] = cmds.checkBox(label=aov) cmds.button(label="创建 AOV", command=lambda x: on_create_aov_button_click(aov_options)) cmds.button(label="关闭", command=lambda x: cmds.deleteUI(window)) cmds.showWindow(window) def on_create_aov_button_click(aov_list): selected = [aov for aov in aov_list if cmds.checkBox(aov_checkboxes[aov], query=True, value=True)] if selected: create_aovs(selected) connect_aov_drivers() else: cmds.warning("请至少选择一个 AOV") # 启动 UI create_aov_ui() ``` --- ### ✅ 改动说明: - 将 `aovs.AOVInterface.getAOVNode(aov_name)` 改为: ```python aov_interface = aovs.AOVInterface() aov_interface.getAOVNode(aov_name) ``` - 所有 AOV 的添加和查询操作都通过 `aov_interface` 实例完成。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值