__repr__
veya __str__
arasında seçim yapmanız gerekiyorsa, varsayılan olarak __str__
çağrıları, tanımlanmadığında __repr__
numaralı çağrıları gerçekleştirin.
Özel vector3 örnek: Bu örnekte
class Vector3(object):
def __init__(self, args):
self.x = args[0]
self.y = args[1]
self.z = args[2]
def __repr__(self):
return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)
def __str__(self):
return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)
, repr
döner yine str
bir hata ayıklama çıkışı olarak daha kullanışlıdır oysa doğrudan idam/tüketilebilir bir dize.
v = Vector3([1,2,3])
print repr(v) #Vector3([1,2,3])
print str(v) #Vector(x:1, y:2, z:3)
Bir çeşit sınıf dekoratörü oluşturmak istiyorum, bu yüzden her biri için bir metaclass yazmak zorunda kalmadan sınıflarım için özel dize gösterimlerini kolayca ayarlayabilirim. Python'un meta sınıflarına çok aşina değilim, o yüzden bana herhangi bir işaretçi verebilir misin? –
Maalesef bu, sınıf dekoratörleriyle yapılamaz; sınıf tanımlandığında ayarlanmalıdır. –
@ Space_C0wb0y: Sınıf gövdesine '_representation 'gibi bir dize ve metaclassın' __repr __() 'yönteminde' self._representation \ 'i döndürme) ekleyebilirsiniz. –