< __ main __。0x037D07B0处的动物对象>错误python 3

时间:2015-10-17 09:51:36

标签: python class

尝试进行任务并且卡在内存地址上。 我已经想出了两种不同的方法来克服这个问题,但两者并不完全存在......

这是我尝试的一个例子(我不认为我允许在线发布我的代码)

class example(object):
    def __init__(self,string1,integer1):
        self.string1 = string1
        self.integer1 = integer1

    def __repr__(self):
        print('-------------------------')
        print('#' + self.integer1 + '' + '-' + ' ' + string1)
        print('-------------------------')

I want it to print like this:

    -------------------
    # 5 - hello
    -------------------

如果我使用 repr 方法,我会无法转换' int'反对隐含的意图'错误。 如果我使用 str 方法,则会出现内存错误 如果我尝试使用return,我不能因为它需要返回多行。

我需要保持每个对象变量的类型相同,然后我只需要输出没有内存错误......

希望这个问题不是很难(或者很简单:P)对于python 3中的OOP来说很新。

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用+进行字符串连接时,不能将字符串添加到整数。示例 -

>>> 5 + 'asd'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Python是一种强类型语言,它不会在字符串连接期间自动将整数转换为字符串。

您应该使用一些字符串格式化方法,例如str.format()

另外,需要注意的另一件事是你需要从__repr__()返回值而不是打印它。然后,如果你想在控制台中打印它,你应该调用print(a)(或Python 2.x中的print a)。示例 -

class example(object):
    def __init__(self,string1,integer1):
        self.string1 = string1
        self.integer1 = integer1
    def __repr__(self):
        return ("-------------------------\n"
                "#{} - {}\n"
                "-------------------------").format(self.integer1,self.string1)

演示 -

>>> class example(object):
...     def __init__(self,string1,integer1):
...         self.string1 = string1
...         self.integer1 = integer1
...     def __repr__(self):
...         return ("-------------------------\n"
...                 "#{} - {}\n"
...                 "-------------------------").format(self.integer1,self.string1)
...
>>> a = example('hello',5)
>>> print(a)
-------------------------
#5 - hello
-------------------------

答案 1 :(得分:1)

让我们看看您尝试的问题。

print('#' + self.integer1 + '' + '-' + ' ' + string1)

看,你在这里想念自己。

其次,这会引发concatenation错误:

TypeError: cannot concatenate 'str' and 'int' objects

那是因为,self.integer1int,将其投放到str。或者甚至更好,使用format

第三,你根本不应该打印它。

  

repr 应返回对象的可打印表示

您正在__repr__内打印,不应该像这样使用。你宁愿改变它:

class example(object):
    def __init__(self,string1,integer1):
        self.string1 = string1
        self.integer1 = integer1

    def __repr__(self):
        return '#' + str(self.integer1) + '' + '-' + ' ' + self.string1


print('-------------------------')
print example("hello",5)
print('-------------------------')