为什么我的Dinosaurus类在<xmain __。Dinosaurus对象0x026B5210>处给出错误?

时间:2018-11-11 11:38:15

标签: python python-3.x class representation

我写了这个课:

class Dinosaurus:

    def __init__(self, nimi, suurus, värv, toit):
        self.nimi = nimi
        self.suurus = suurus
        self.värv = värv
        self.toit = toit

但是当我尝试使用它时...

Dinosaur = Dinosaurus ("Stegosaurus", "20", "sinine", "Liha")

print(Dinosaur)

我遇到错误:

<__main__.Dinosaurus object at 0x026B5210>

我在做什么错了?

1 个答案:

答案 0 :(得分:4)

<__main__.Dinosaurus object at 0x026B5210>并非错误-它是对象的表示形式

稍作试验后,发现Dinosaur具有您为其分配的所有属性:

>>> Dinosaur = Dinosaurus ("Stegosaurus", "20", "sinine", "Liha")
>>> Dinosaur
<__main__.Dinosaurus object at 0x7f893d9b5320>
>>> Dinosaur.nimi
'Stegosaurus'
>>> Dinosaur.suurus
'20'
>>> Dinosaur.värv
'sinine'
>>> Dinosaur.toit
'Liha'

如果要更改在打印类实例时显示的表示形式,则需要编写一个特殊的__repr__方法来告诉Python应该如何表示它们,例如:

class Dinosaurus:

    def __init__(self, nimi, suurus, värv, toit):
        self.nimi = nimi
        self.suurus = suurus
        self.värv = värv
        self.toit = toit

    def __repr__(self):
        return 'Dinosaurus(%r, %r, %r, %r)' % (self.nimi, self.suurus, self.värv, self.toit)

>>> Dinosaur = Dinosaurus ("Stegosaurus", "20", "sinine", "Liha")
>>> print(Dinosaur)
Dinosaurus('Stegosaurus', '20', 'sinine', 'Liha')

您还可以定义一个__str__方法,如果同时定义了两个对象,则在打印对象时,Python将优先使用__repr__。您应该将__str__视为返回对象的非正式,人性化的表示形式,并将__repr__视为形式化的表示形式(如果可能的话,它应该是可用于生成以下内容的有效Python表达式)的确切副本,如上面的示例)。