Diyelim ki python'da basit bir sınıfım var
class Wharrgarbl(object): def __init__(self, a, b, c, sum, version="old" ): self.a = a self.b = b self.c = c self.sum = 6 self.version = sürüm def __int__(self): dönüş self.sum + 9000 def __what_goes_here__(self): dönüş {"a" : self.a, "b": self.b, "c": self.c}
Bunu bir tamsayıya çok kolay çevirebilirim
>>> w = Wharrgarbl("bir", "iki", "üç", 6) >>> int(w) 9006
Bu harika! Ama şimdi onu benzer bir şekilde bir dikteye dönüştürmek istiyorum
>>> w = Wharrgarbl("bir", "iki", "üç", 6) >>> dict(w) {"a": "bir", "c": "üç", "b": "iki"}
Bunun çalışması için neyi tanımlamam gerekiyor ? __what_goes_here__
yerine hem __dict__
hem de dict
kullanmayı denedim, ancak dict(w)
bir TypeError ile sonuçlandı : Her iki durumda da Wharrgarbl nesnesi yinelenemez
. Sınıfı tekrarlanabilir hale getirmenin sorunu çözeceğini düşünmüyorum. Ayrıca "python cast object to dict" ifadesinin düşünebildiğim kadar çok farklı ifadesiyle birçok google'ı denedim ama alakalı bir şey bulamadım:{
Ayrıca! w.__dict__
çağrısının, w.version
ve w.sum
içereceği için istediğimi yapmayacağına dikkat edin. Alımı, def int(self)
kullanarak int
olarak özelleştirebildiğim şekilde dict
olarak özelleştirmek istiyorum.
Böyle bir şey yapabileceğimi biliyorum
>>> w.__what_goes_here__() {"a": "bir", "c": "üç", "b": "iki"}
Ancak Pythonic bir yol olduğunu varsayıyorum int(w)
veya str(w)
ile aynı türde olduğundan, dict(w)
işlevini yapmak için. Daha Pythonic bir yol varsa, bu da sorun değil, sadece sorayım dedim. Ah! Sanırım önemli olduğu için, bu python 2.7 için, ancak 2.4 eski ve bozuk bir çözüm için de süper bonus puanlar.
Başka bir soru var python sınıfında __dict__() aşırı yükleme buna benzer, ancak bunun bir kopya olmadığını garanti edecek kadar farklı olabilir. OP'nin sınıf nesnelerindeki tüm verilerin sözlük olarak nasıl yayınlanacağını sorduğuna inanıyorum. dict()
tarafından döndürülen sözlükte bulunan __dict__
içindeki her şeyin olmasını istemiyorum. Genel ve özel değişkenler gibi bir şey aradığımı açıklamak için yeterli olabilir. Nesneler, hesaplamalarda kullanılan bazı değerleri depolayacak ve sonuçta ortaya çıkan sözlüklerde görünmeye ihtiyacım yok/istemiyorum.
GÜNCELLEME: asdict