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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:20