【问题标题】:__str__() doesn't work after importing class__str__() 在导入类后不起作用
【发布时间】:2016-08-24 14:30:17
【问题描述】:

导入类时遇到问题:str()在导入类后不起作用

class unit:

    value = None
    node = None

    def __init__(self,value,node):
        self.value = value
        self.node = node

    def __str__(self):
        if self.node == None:
            return str(self.value) + " -> " + "Null"
        else:
            return str(self.value) + " -> " + str(self.node.value)

在类文件中,str() 按预期工作:

print unit(5,None)
5 -> Null

但是当我导入类并测试打印功能时,它返回对象地址而不是预先指定的文本:

from unit import unit

new =  unit(5,None)
print new
<unit.unit instance at 0x000000000A8420C8>

你能帮我理解发生了什么问题吗?

【问题讨论】:

  • 请修正代码的缩进。它不能像这里显示的那样运行。
  • 将您的“打印新”更改为“打印(新)”。它适用于python3
  • @chenchuk 还建议始终将 print 视为一个函数,以便我的代码可以被视为 Python 2 和 Python 3。但如果代码不应该是 Python 3,那么它不是“必要”。
  • 对我来说工作得很好。这是你的python文件最近的变化吗?如果是,您是否重新编译了您的 unit 文件?
  • 你确定你真的在打印它,而不仅仅是在解释器提示符下输入名称(使用__repr__,而不是__str__)?

标签: python string oop import


【解决方案1】:

假设您将两个 .py 文件放在同一个目录中,您的 Python 2.7 代码使用标准的 CPython 解释器(例如 Canopy)运行良好。 Python 3.5 Anaconda 等解释器会抱怨 print 没有被用作函数,因此不会执行。

由于您的print 表现为对象的默认print 实现,因此您需要重新编译(.pyc 文件)涉及的.py 文件。这可以通过在某些 IDE 中重新启动内核来轻松完成。

Canopy IDE 允许您在 Python 解释器仍处于活动状态时再次运行 .py 文件。但是,在此重新运行之前创建的所有对象都保持不变,并且不会神奇地获得您覆盖的 __str__ 成员方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2013-08-13
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多