我写了这个课:
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>
我在做什么错了?
答案 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表达式)的确切副本,如上面的示例)。