2016-08-23 9 views
0

后不工作,我遇到了一个问题,同时导入类:在STR()类文件中导入类__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> 

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

+2

请修复代码的缩进。它不能像这里显示的那样运行。 – Matthias

+0

将您的'打印新'更改为'打印(新)'。它可以在python3 – chenchuk

+1

@chenchuk也建议总是考虑打印作为一个函数,以便我的代码可以被视为Python 2和Python 3.但是,如果代码不应该是Python 3,它不是“必要的”。 – Matthias

回答

0

假设你把两个.py文件在同一目录下,你Python 2.7代码运行精细与标准CPython解释如CanopyPython 3.5解释器如Anaconda会抱怨print未被用作函数,因此不会执行。

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

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