Python类中runcalc调用matrice2x2mult报NameError问题求助
错误原因
- 类内部定义的方法属于类的实例成员,不能直接通过函数名调用,必须通过实例对象引用,也就是要加
self.前缀。你在runcalc里直接写matrice2x2mult(),Python会在全局作用域查找这个函数,找不到就抛出NameError。 - 你当前定义的
matrice2x2mult方法没有加self参数,属于未绑定的方法,后续即使加了self.前缀调用,也会因为实例自动传入的self参数没有位置接收,抛出参数数量不匹配的错误。
解决方案
只需要修改两处代码即可:
- 给
matrice2x2mult方法添加self参数 - 在runcalc方法中调用时改为
self.matrice2x2mult()
完整修复代码
import time class calculator(): def __init__(self, method): self.method = method def matrice2x2mult(self): # 新增self参数 print("Matrix 1:") a = input("a:") b = input("b:") c = input("c:") d = input("d:") print(f"({a} {b})\n({c} {d})") def runcalc(self, method): if self.method == "1": print("yes") self.matrice2x2mult() # 新增self.前缀 elif self.method == "2": pass print ("welcome to matrice Calculator: \nEnter 'HELP' for help menu") time.sleep(1) q = input(r"What method is required:") q = str(q) help1 = False while help1 == False: if r"HELP" in str(q): print("------help-menu------") print("ENTER '1' FOR 2X2 MATRIX MULTIPLICATION") print("ENTER '2' FOR A INVERSE OF A 2X2 MATRIX") time.sleep(1) q = str(input(r"What method is required:")) break else: break pass query = calculator(q) query.runcalc(q)
可选优化点
- runcalc方法传入的method参数没有被使用,你已经在实例化的时候把method存在了
self.method里,可以删掉这个冗余参数。 - 2x2矩阵乘法目前只实现了第一个矩阵的输入,后续可以补全第二个矩阵输入和乘法计算逻辑。
内容的提问来源于stack exchange,提问作者jasray
相关产品推荐
相关产品推荐

