调用类方法报缺少self参数、实例化类报未定义错误如何解决
Python两类类操作报错解决方案
1. TypeError: a_functin_in_class() missing 1 required positional argument: 'self'
触发原因
类的普通实例方法必须绑定实例对象后才能执行,调用时会自动将实例作为self参数注入,报错说明你调用的方法没有绑定实例:
- 在
__init__或者其他类方法中调用实例方法时,漏写self.前缀,直接写方法名调用 - 直接用类名调用普通实例方法,未手动传入实例参数
- 实例方法被意外覆盖为非可调用对象,绑定失效
修正方案
调用类内定义的普通实例方法时,统一加self.前缀:
# 错误写法 class TestClass: def __init__(self): test_method() # 漏写self.,没有绑定实例 def test_method(self): print("执行成功") # 正确写法 class TestClass: def __init__(self): self.test_method() # 加self.绑定当前实例,自动传入self参数 def test_method(self): print("执行成功")
2. NameError: name 'class instant' is not defined
触发原因
当前作用域内找不到你写的变量/类名:
- 类定义的代码顺序在实例化代码之后,执行实例化操作时类还未被注册到当前作用域
- 类名、实例变量名拼写错误,大小写不匹配
- 在类内部方法中调用外部定义的类实例时,没有将实例作为参数传入,也未声明为全局变量
修正方案
- 保证类定义代码执行顺序在实例化代码之前
- 核对类名、实例变量名的拼写、大小写是否和定义完全一致
- 类内部需要访问外部实例时,优先将实例作为参数传入方法
# 错误写法 实例化顺序在前 ins = TestClass() # 此时TestClass还未定义,触发报错 class TestClass: pass # 正确写法 先定义类再实例化 class TestClass: pass ins = TestClass()
内容的提问来源于stack exchange,提问作者Ibrahim Abu shawish
相关产品推荐
相关产品推荐

