如何在Python中使用self关键字传递对象?及相关报错解析
在Python中通过self传递对象的正确方式
你遇到的TypeError本质是没有正确创建类的实例,同时调用方法的方式不符合Python的类/实例规则:
- 代码里
a = A和b = B是把类本身赋值给变量,而非创建类的实例。直接用类调用实例方法时,Python不会自动传入self参数,这才触发了缺少self的错误。 - 调用
a.wave(friend=B)时,传入的B是类本身,但wave方法需要的是B的实例才能调用make_friend方法。 - 另外
B类的__init__方法中,val = 'B'没有绑定到实例,应该写成self.val = 'B',否则实例无法访问该属性。
修正后的代码
class A: def __init__(self): self.val = 'A' def wave(self, friend): # 通过self传递当前A实例给B的make_friend方法 friend.make_friend(self) class B: def __init__(self): self.val = 'B' # 将属性绑定到实例 def make_friend(self, friend): self.friend = friend # 创建类的实例(必须加括号) a = A() b = B() # 传入B的实例调用wave方法 a.wave(friend=b) # 验证结果:b的friend属性指向a实例 print(b.friend.val) # 输出: A
关于self的说明
在Python实例方法中,self代表当前方法所属的实例。只有通过实例调用方法时,Python才会自动把该实例作为self参数传入方法。你想通过self传递当前A实例给B的思路完全可行,核心是要先正确创建类的实例,再通过实例触发方法调用。
内容的提问来源于stack exchange,提问作者jbuddy_13
相关产品推荐
相关产品推荐

