添加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
相关产品推荐
相关产品推荐

