You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加super调用后出现Type Error:元类基类调用参数不符

解决Maya中TetrisBoard类初始化的参数不匹配错误

这种错误我之前在Maya里写自定义类的时候也踩过坑,咱们一步步拆解解决它:

错误原因分析

你看到的__init__() takes exactly 3 arguments (4 given)本质是父类初始化方法的参数要求,和你用super调用时传入的参数不匹配。结合Maya默认的Python2环境,以及Maya内置类的旧式继承机制,很容易出现这种参数错位的问题。

具体解决方案

1. 直接调用父类__init__(Maya场景下最稳妥的写法)

Maya里很多内置类属于旧式类,对super的新式调用支持不佳,直接显式调用父类初始化方法反而更可靠。

假设你的TetrisBoard继承自ParentClass,先确认父类__init__的参数需求,然后这样写:

class TetrisBoard(ParentClass):
    def __init__(self, arg1, arg2):  # 参数需匹配你的业务场景
        # 直接传入self和父类要求的参数
        ParentClass.__init__(self, arg1, arg2)
        # 编写你的自定义初始化逻辑
        self.board_grid = []
        # ...其他代码

2. 匹配super调用的参数(若坚持使用super)

如果一定要用super,必须确保传入的参数完全符合父类__init__的定义。比如父类__init__是def __init__(self, width, height):,那调用时要传对应参数:

class TetrisBoard(ParentClass, object):  # Python2中显式继承object转为新式类
    def __init__(self, width, height):
        super(TetrisBoard, self).__init__(width, height)
        # 你的初始化代码

3. 排查父类的参数要求

如果不确定父类需要什么参数,可以用inspect模块打印它的方法签名:

import inspect
print(inspect.getargspec(ParentClass.__init__))

输出结果会明确告诉你父类__init__需要的参数数量和名称,照着传就不会出错。

额外提醒

Maya的Python环境比较特殊,很多内置UI类或API类不是标准Python新式类,尽量避免混用super和旧式类的继承逻辑,直接显式调用父类方法是最不容易出问题的选择。

内容的提问来源于stack exchange,提问作者lds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:29:14