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

Python OOP代码无法打印类对象名称?求排查与解决方法

你的Python OOP代码问题分析与修复方案

咱们来一步步拆解你代码里的问题,然后把它改对:

存在的核心问题

  • __init__没保存实例属性:你在初始化方法里接收了name参数,但没把它存到实例里(也就是没写self.name = name),导致你的bob实例根本没有存储"bob"这个名字,后续自然没法访问它。
  • 方法名和属性名冲突:你定义了一个叫name的方法,这会和你本来想设置的实例属性重名。而且方法里写bob.name也不对——此时bob.name是这个方法本身,不是属性,方法内部应该用self来引用当前实例的内容。
  • 从未调用打印名称的方法:你创建了bob实例,但从来没触发过那个name方法,就算方法写对了也不会执行打印操作。

修正后的代码示例

这里给你两种常见的实现方式,按需选择:

方式1:通过方法打印名称

class Human:
    # 类名建议用大驼峰,符合Python的PEP8规范
    def __init__(self, name):
        self.name = name  # 把传入的名字存为实例属性
        print("this is a human")
    
    def print_name(self):  # 改名避免和属性冲突
        print(f"this is {self.name}")  # 用self访问当前实例的属性

bob = Human("bob")
bob.print_name()  # 调用方法打印名字

方式2:直接打印实例时显示名称(更常用)

如果希望直接print(bob)就能看到名字,可以实现__str__魔法方法:

class Human:
    def __init__(self, name):
        self.name = name
        print("this is a human")
    
    def __str__(self):
        return f"this is {self.name}"

bob = Human("bob")
print(bob)  # 直接打印实例就会输出名字

内容的提问来源于stack exchange,提问作者Heech.p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:22:42