{"id":31354,"date":"2025-10-09T00:23:08","date_gmt":"2025-10-08T21:23:08","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/"},"modified":"2025-10-09T00:23:08","modified_gmt":"2025-10-08T21:23:08","slug":"giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/","title":{"rendered":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?"},"content":{"rendered":"<p><title>Python&#8217;da __str__() ve __repr__() Metotlar\u0131 Nas\u0131l Kullan\u0131l\u0131r?<\/title><\/p>\n<p>Python&#8217;da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, <code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.<\/p>\n<h2>Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?<\/h2>\n<p>Python&#8217;da kendi s\u0131n\u0131flar\u0131n\u0131z\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131zda, bu s\u0131n\u0131flardan olu\u015fturdu\u011funuz nesneleri do\u011frudan yazd\u0131rmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda veya bir hata ay\u0131klay\u0131c\u0131da inceledi\u011finizde genellikle kafa kar\u0131\u015ft\u0131r\u0131c\u0131 \u00e7\u0131kt\u0131larla kar\u015f\u0131la\u015f\u0131rs\u0131n\u0131z. \u00d6rne\u011fin, bir <code>Kullanici<\/code> s\u0131n\u0131f\u0131 olu\u015fturup bu s\u0131n\u0131ftan bir nesne t\u00fcretti\u011finizde, \u00e7\u0131kt\u0131da genellikle <code>&lt;__main__.Kullanici object at 0x...&gt;<\/code> gibi bir ifade g\u00f6r\u00fcrs\u00fcn\u00fcz. Bu t\u00fcr \u00e7\u0131kt\u0131lar, nesnenin bellekteki konumunu belirtse de, nesnenin ger\u00e7ekte ne t\u00fcr veriler i\u00e7erdi\u011fi veya hangi \u00f6zelliklere sahip oldu\u011fu hakk\u0131nda hi\u00e7bir bilgi vermez. Bu durum, \u00f6zellikle karma\u015f\u0131k uygulamalar geli\u015ftirirken veya b\u00fcy\u00fck veri yap\u0131lar\u0131yla u\u011fra\u015f\u0131rken ciddi bir problem haline gelebilir.<\/p>\n<p>\u0130\u015fte tam da bu noktada Python&#8217;\u0131n \u00f6zel metotlar\u0131 olan <code>__str__()<\/code> ve <code>__repr__()<\/code> devreye girer. Bu metotlar, nesnelerinizin &#8220;string temsillerini&#8221; kontrol etmenizi sa\u011flar. Yani, bir nesnenin metin olarak nas\u0131l g\u00f6r\u00fcnece\u011fini siz belirlersiniz. Bu, hem son kullan\u0131c\u0131lar i\u00e7in daha okunabilir \u00e7\u0131kt\u0131lar sunmak hem de geli\u015ftiricilerin hata ay\u0131klama s\u00fcre\u00e7lerinde nesnelerin durumunu kolayca anlamalar\u0131n\u0131 sa\u011flamak a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir. Varsay\u0131lan temsilin yetersiz kalmas\u0131, kodun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde d\u00fc\u015f\u00fcr\u00fcr ve hatalar\u0131 bulmay\u0131 zorla\u015ft\u0131r\u0131r. Bu nedenle, Python geli\u015ftiricileri aras\u0131nda bu iki metodu do\u011fru bir \u015fekilde uygulamak, iyi kodlama prati\u011finin temel ta\u015flar\u0131ndan biri olarak kabul edilir.<\/p>\n<p>Peki, bu iki metot tam olarak ne i\u015fe yarar ve aralar\u0131ndaki farklar nelerdir? K\u0131saca \u00f6zetlemek gerekirse, <code>__str__()<\/code> genellikle &#8220;kullan\u0131c\u0131 dostu&#8221; bir \u00e7\u0131kt\u0131 \u00fcretirken, <code>__repr__()<\/code> &#8220;geli\u015ftirici dostu&#8221; ve m\u00fcmk\u00fcnse nesneyi yeniden olu\u015fturabilecek bir \u00e7\u0131kt\u0131 sa\u011flamay\u0131 hedefler. Bu ayr\u0131m, \u00e7o\u011fu zaman g\u00f6z ard\u0131 edilse de, uygulaman\u0131z\u0131n genel kalitesi ve s\u00fcrd\u00fcr\u00fclebilirli\u011fi \u00fczerinde \u00f6nemli bir etkiye sahiptir. Bu makalede, her iki metodu da ayr\u0131nt\u0131l\u0131 bir \u015fekilde ele alacak, aralar\u0131ndaki n\u00fcanslar\u0131 a\u00e7\u0131klayacak ve ger\u00e7ek d\u00fcnya \u00f6rnekleriyle nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 g\u00f6sterece\u011fiz. B\u00f6ylece, Python nesnelerinizi sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda son derece anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirebileceksiniz. \u015eimdi, bu g\u00fc\u00e7l\u00fc metotlar\u0131n derinliklerine inmeye haz\u0131r olun.<\/p>\n<h2>Temel Kavramlar: __str__() ve __repr__() Aras\u0131ndaki Fark\u0131 Anlamak<\/h2>\n<p>Python&#8217;da <code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131, nesnelerin metinsel temsillerini d\u00f6nd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Her ikisi de temelde bir nesneyi string&#8217;e d\u00f6n\u00fc\u015ft\u00fcrme i\u015flevi g\u00f6rse de, kullan\u0131m ama\u00e7lar\u0131 ve hedef kitleleri a\u00e7\u0131s\u0131ndan belirgin farkl\u0131l\u0131klar g\u00f6sterirler. Bu farklar\u0131 anlamak, hangi metodu ne zaman kullanaca\u011f\u0131n\u0131za karar verirken kritik \u00f6neme sahiptir.<\/p>\n<p>\u00d6ncelikle <strong><code>__str__()<\/code> metodu<\/strong> ile ba\u015flayal\u0131m. Bu metot, bir nesnenin &#8220;gayri resmi&#8221; ve &#8220;kullan\u0131c\u0131 dostu&#8221; string temsilini d\u00f6nd\u00fcrmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Amac\u0131, son kullan\u0131c\u0131ya veya bir log dosyas\u0131na yaz\u0131lacak \u015fekilde, insan taraf\u0131ndan kolayca okunabilir bir \u00e7\u0131kt\u0131 sa\u011flamakt\u0131r. \u00d6rne\u011fin, bir <code>M\u00fc\u015fteri<\/code> nesnesinin <code>__str__()<\/code> metodu, &#8220;M\u00fc\u015fteri: Ali Y\u0131lmaz (ID: 123)&#8221; gibi bir \u00e7\u0131kt\u0131 verebilir. Bu \u00e7\u0131kt\u0131, nesnenin t\u00fcm detaylar\u0131n\u0131 i\u00e7ermek zorunda de\u011fildir; \u00f6nemli olan, nesnenin \u00f6z\u00fcn\u00fc anla\u015f\u0131l\u0131r bir \u015fekilde ifade etmesidir. <code>print()<\/code> fonksiyonu, <code>str()<\/code> yerle\u015fik fonksiyonu ve f-string&#8217;ler gibi ba\u011flamlarda otomatik olarak <code>__str__()<\/code> metodu \u00e7a\u011fr\u0131l\u0131r. E\u011fer bir s\u0131n\u0131f <code>__str__()<\/code> metodunu tan\u0131mlamazsa, Python varsay\u0131lan olarak <code>__repr__()<\/code> metodunu \u00e7a\u011f\u0131rmaya \u00e7al\u0131\u015f\u0131r. E\u011fer <code>__repr__()<\/code> de tan\u0131ml\u0131 de\u011filse, yukar\u0131da bahsetti\u011fimiz <code>&lt;__main__.Kullanici object at 0x...&gt;<\/code> gibi varsay\u0131lan bir \u00e7\u0131kt\u0131 al\u0131rs\u0131n\u0131z.<\/p>\n<p>\u00d6te yandan, <strong><code>__repr__()<\/code> metodu<\/strong>, bir nesnenin &#8220;resmi&#8221; ve &#8220;geli\u015ftirici dostu&#8221; string temsilini d\u00f6nd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Bu temsil, m\u00fcmk\u00fcnse nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilecek kesin ve belirsizli\u011fe yer b\u0131rakmayan bir string olmal\u0131d\u0131r. Geli\u015ftiricilerin hata ay\u0131klama (debugging) s\u0131ras\u0131nda nesnenin tam durumunu anlamalar\u0131na yard\u0131mc\u0131 olmak temel amac\u0131d\u0131r. \u00d6rne\u011fin, bir <code>M\u00fc\u015fteri<\/code> nesnesinin <code>__repr__()<\/code> metodu, <code>\"M\u00fc\u015fteri(ad='Ali', soyad='Y\u0131lmaz', id=123)\"<\/code> gibi bir \u00e7\u0131kt\u0131 verebilir. Bu \u00e7\u0131kt\u0131, genellikle <code>eval()<\/code> fonksiyonu ile yeniden ayn\u0131 nesneyi olu\u015fturabilecek formatta olmal\u0131d\u0131r, ancak bu her zaman pratik veya g\u00fcvenli olmayabilir. Python&#8217;\u0131n etkile\u015fimli kabu\u011fu (REPL) ve hata ay\u0131klay\u0131c\u0131lar, nesneleri g\u00f6r\u00fcnt\u00fclerken <code>__repr__()<\/code> metodunu kullan\u0131r. <code>repr()<\/code> yerle\u015fik fonksiyonu da do\u011frudan bu metodu \u00e7a\u011f\u0131r\u0131r. <code>__repr__()<\/code>, <code>__str__()<\/code>&#8216;ye g\u00f6re daha kapsaml\u0131 ve teknik bilgiler i\u00e7ermelidir, \u00e7\u00fcnk\u00fc hedef kitlesi kodun derinliklerine inen geli\u015ftiricilerdir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: \u0130yi bir uygulama olarak, her zaman <code>__repr__()<\/code> metodunu tan\u0131mlaman\u0131z \u00f6nerilir. E\u011fer <code>__str__()<\/code> metodu tan\u0131mlamazsan\u0131z, Python otomatik olarak <code>__repr__()<\/code> metodunu kullan\u0131r. Bu sayede, en az\u0131ndan geli\u015ftirici dostu bir temsiliniz olur. Ancak, kullan\u0131c\u0131ya y\u00f6nelik \u00e7\u0131kt\u0131lar i\u00e7in mutlaka <code>__str__()<\/code>&#8216;yi de tan\u0131mlamal\u0131s\u0131n\u0131z.\n<\/div>\n<p>Bu iki metot aras\u0131ndaki temel fark\u0131 bir \u00f6rnekle peki\u015ftirelim: Bir tarih nesnesi d\u00fc\u015f\u00fcn\u00fcn. <code>__str__()<\/code> \u00e7\u0131kt\u0131s\u0131 &#8220;25 Ekim 2023&#8221; olabilirken, <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 &#8220;datetime.date(2023, 10, 25)&#8221; \u015feklinde olabilir. \u0130lk \u00f6rnek insan okumas\u0131 i\u00e7in idealdir, ikincisi ise Python kodunda o tarihi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilir. Sonu\u00e7 olarak, <code>__str__()<\/code> ve <code>__repr__()<\/code>, Python nesnelerinin metinsel d\u00fcnyadaki iki farkl\u0131 y\u00fcz\u00fcn\u00fc temsil eder ve her ikisinin de do\u011fru yerlerde kullan\u0131lmas\u0131, kodunuzun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 ve s\u00fcrd\u00fcr\u00fclebilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu ayr\u0131m\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak, \u015fimdi bu metotlar\u0131 nas\u0131l uygulayaca\u011f\u0131m\u0131za ge\u00e7elim.<\/p>\n<h3>__str__() Metodunu Uygulamak: Kullan\u0131c\u0131 Dostu \u00c7\u0131kt\u0131lar Nas\u0131l Olu\u015fturulur?<\/h3>\n<p><code>__str__()<\/code> metodu, Python&#8217;da nesnelerinizin &#8220;insan taraf\u0131ndan okunabilir&#8221; bir temsilini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. Bu, \u00f6zellikle nesnelerinizi bir kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6stermeniz, bir log dosyas\u0131na yazman\u0131z veya bir raporun par\u00e7as\u0131 olarak sunman\u0131z gerekti\u011finde hayati \u00f6nem ta\u015f\u0131r. Bu b\u00f6l\u00fcmde, <code>__str__()<\/code> metodunu ad\u0131m ad\u0131m nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ve kullan\u0131c\u0131 dostu \u00e7\u0131kt\u0131lar olu\u015fturmak i\u00e7in nelere dikkat etmeniz gerekti\u011fini inceleyece\u011fiz.<\/p>\n<p>\u00d6ncelikle, basit bir <code>Kitap<\/code> s\u0131n\u0131f\u0131 tan\u0131mlayarak ba\u015flayal\u0131m. Bu s\u0131n\u0131f\u0131n ba\u015fl\u0131k, yazar ve yay\u0131n y\u0131l\u0131 gibi \u00f6zellikleri olsun. E\u011fer <code>__str__()<\/code> metodunu tan\u0131mlamazsak, bir <code>Kitap<\/code> nesnesini yazd\u0131rmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131zda ne olaca\u011f\u0131n\u0131 g\u00f6relim:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, yayin_yili):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.yayin_yili = yayin_yili\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1862)\nprint(kitap1)\n<\/code><\/pre>\n<p>Yukar\u0131daki kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, muhtemelen <code>&lt;__main__.Kitap object at 0x...&gt;<\/code> gibi bir \u00e7\u0131kt\u0131 al\u0131rs\u0131n\u0131z. Bu, nesnenin bellekteki adresini g\u00f6sterir ve kullan\u0131\u015fl\u0131 bir bilgi de\u011fildir. \u0130\u015fte bu noktada <code>__str__()<\/code> metodunu tan\u0131mlayarak bu \u00e7\u0131kt\u0131y\u0131 daha anlaml\u0131 hale getirebiliriz:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, yayin_yili):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.yayin_yili = yayin_yili\n\n    def __str__(self):\n        # Kullan\u0131c\u0131 dostu bir string temsil d\u00f6nd\u00fcr\u00fcr\n        return f\"'{self.baslik}' - {self.yazar} ({self.yayin_yili})\"\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1862)\nprint(kitap1)\nkitap2 = Kitap(\"Su\u00e7 ve Ceza\", \"Fyodor Dostoyevski\", 1866)\nprint(str(kitap2)) # str() fonksiyonu da __str__() metodunu \u00e7a\u011f\u0131r\u0131r\n<\/code><\/pre>\n<p>\u015eimdi, kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda \u00e7\u0131kt\u0131n\u0131z \u00e7ok daha bilgilendirici olacakt\u0131r:<br \/>\n<code>'Sefiller' - Victor Hugo (1862)<\/code><br \/>\n<code>'Su\u00e7 ve Ceza' - Fyodor Dostoyevski (1866)<\/code><br \/>\nG\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, <code>__str__()<\/code> metodu sayesinde nesnemizin i\u00e7eri\u011fini anla\u015f\u0131l\u0131r bir \u015fekilde g\u00f6r\u00fcnt\u00fcleyebiliyoruz. Bu, \u00f6zellikle bir koleksiyondaki birden fazla kitab\u0131 listelerken veya bir hata mesaj\u0131nda kitap bilgilerini g\u00f6stermek istedi\u011finizde \u00e7ok daha faydal\u0131d\u0131r. <code>__str__()<\/code> metodu, genellikle nesnenin temel \u00f6zelliklerini \u00f6zetleyen ve okuyucuyu bunaltmayacak kadar k\u0131sa ve \u00f6z olmal\u0131d\u0131r. Karma\u015f\u0131k detaylar\u0131 veya t\u00fcm dahili durumu g\u00f6stermek yerine, nesnenin neyi temsil etti\u011fine dair genel bir fikir vermelidir.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: <code>__str__()<\/code> i\u00e7inde f-string&#8217;leri kullanmak, dinamik ve okunabilir string&#8217;ler olu\u015fturman\u0131n en modern ve etkili yollar\u0131ndan biridir. Bu sayede, de\u011fi\u015fkenleri do\u011frudan string i\u00e7ine g\u00f6mebilir ve kodunuzu daha temiz tutabilirsiniz.\n<\/div>\n<p>Unutulmamal\u0131d\u0131r ki, <code>__str__()<\/code> metodu her zaman bir string d\u00f6nd\u00fcrmelidir. Ba\u015fka bir veri tipi d\u00f6nd\u00fcrmeye \u00e7al\u0131\u015fmak, \u00e7al\u0131\u015fma zaman\u0131 hatas\u0131na yol a\u00e7acakt\u0131r. Ayr\u0131ca, bu metodun \u00e7\u0131kt\u0131s\u0131 genellikle tek sat\u0131rda olacak \u015fekilde tasarlan\u0131r, ancak birden fazla sat\u0131r i\u00e7eren string&#8217;ler de d\u00f6nd\u00fcrebilirsiniz. Ancak, bu durumda bile okunabilirli\u011fi ve sadeli\u011fi korumak \u00f6nemlidir. <code>__str__()<\/code>&#8216;nin amac\u0131, nesnenizi &#8220;konu\u015fturmak&#8221; ve onun hakk\u0131nda temel bilgileri insanlara aktarmakt\u0131r. Bu nedenle, \u00e7\u0131kt\u0131n\u0131n esteti\u011fi ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131 \u00f6n planda tutulmal\u0131d\u0131r. Bu sayede, uygulaman\u0131z\u0131n kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirebilirsiniz. \u015eimdi, geli\u015ftirici odakl\u0131 temsil olan <code>__repr__()<\/code> metoduna ge\u00e7elim.<\/p>\n<h3>__repr__() Metodunu Uygulamak: Geli\u015ftirici Odakl\u0131 Temsiller Nas\u0131l Sa\u011flan\u0131r?<\/h3>\n<p><code>__repr__()<\/code> metodu, Python&#8217;da nesnelerinizin &#8220;resmi&#8221; ve &#8220;geli\u015ftirici dostu&#8221; bir string temsilini sa\u011flamak i\u00e7in kullan\u0131l\u0131r. <code>__str__()<\/code>&#8216;nin aksine, <code>__repr__()<\/code>&#8216;nin amac\u0131, nesneyi m\u00fcmk\u00fcnse yeniden olu\u015fturabilecek kadar kesin ve belirsizli\u011fe yer b\u0131rakmayan bir \u00e7\u0131kt\u0131 sunmakt\u0131r. Bu, \u00f6zellikle hata ay\u0131klama (debugging) s\u00fcre\u00e7lerinde, nesnelerin durumunu detayl\u0131 bir \u015fekilde incelemek isteyen geli\u015ftiriciler i\u00e7in kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, <code>__repr__()<\/code> metodunu nas\u0131l uygulayaca\u011f\u0131n\u0131z\u0131 ve geli\u015ftirici odakl\u0131 \u00e7\u0131kt\u0131lar olu\u015ftururken nelere dikkat etmeniz gerekti\u011fini ad\u0131m ad\u0131m inceleyece\u011fiz.<\/p>\n<p>\u00d6nceki b\u00f6l\u00fcmde kulland\u0131\u011f\u0131m\u0131z <code>Kitap<\/code> s\u0131n\u0131f\u0131n\u0131 tekrar ele alal\u0131m. E\u011fer sadece <code>__str__()<\/code> metodunu tan\u0131mlam\u0131\u015f olsayd\u0131k ve etkile\u015fimli Python kabu\u011funda bir <code>Kitap<\/code> nesnesini do\u011frudan yazd\u0131rsayd\u0131k ne olurdu? \u00d6rne\u011fin:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, yayin_yili):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.yayin_yili = yayin_yili\n\n    def __str__(self):\n        return f\"'{self.baslik}' - {self.yazar} ({self.yayin_yili})\"\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1862)\n# Etkile\u015fimli kabukta veya bir hata ay\u0131klay\u0131c\u0131da do\u011frudan nesneyi \u00e7a\u011f\u0131rma\nkitap1\n<\/code><\/pre>\n<p>Bu durumda, etkile\u015fimli kabuk hala varsay\u0131lan <code>&lt;__main__.Kitap object at 0x...&gt;<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 verecektir, \u00e7\u00fcnk\u00fc kabuk varsay\u0131lan olarak <code>__repr__()<\/code>&#8216;yi \u00e7a\u011f\u0131r\u0131r ve biz hen\u00fcz onu tan\u0131mlamad\u0131k. \u015eimdi, <code>__repr__()<\/code> metodunu tan\u0131mlayarak bu \u00e7\u0131kt\u0131y\u0131 daha anlaml\u0131 hale getirelim:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, yayin_yili):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.yayin_yili = yayin_yili\n\n    def __str__(self):\n        return f\"'{self.baslik}' - {self.yazar} ({self.yayin_yili})\"\n\n    def __repr__(self):\n        # Geli\u015ftirici dostu, nesneyi yeniden olu\u015fturabilecek bir string temsil d\u00f6nd\u00fcr\u00fcr\n        return f\"Kitap(baslik='{self.baslik}', yazar='{self.yazar}', yayin_yili={self.yayin_yili})\"\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1862)\nprint(kitap1) # __str__() \u00e7a\u011fr\u0131l\u0131r\nprint(repr(kitap1)) # repr() fonksiyonu __repr__() metodunu \u00e7a\u011f\u0131r\u0131r\nkitap1 # Etkile\u015fimli kabukta __repr__() \u00e7a\u011fr\u0131l\u0131r\n<\/code><\/pre>\n<p>Yukar\u0131daki kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda veya etkile\u015fimli kabukta <code>kitap1<\/code> yaz\u0131p Enter&#8217;a bast\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi \u00e7\u0131kt\u0131lar al\u0131rs\u0131n\u0131z:<br \/>\n<code>'Sefiller' - Victor Hugo (1862)<\/code> (<code>print(kitap1)<\/code> \u00e7\u0131kt\u0131s\u0131)<br \/>\n<code>Kitap(baslik='Sefiller', yazar='Victor Hugo', yayin_yili=1862)<\/code> (<code>print(repr(kitap1))<\/code> ve etkile\u015fimli kabuk \u00e7\u0131kt\u0131s\u0131)<br \/>\nBu \u00e7\u0131kt\u0131, nesnenin s\u0131n\u0131f ad\u0131n\u0131 ve kurucuya ge\u00e7irilen arg\u00fcmanlar\u0131 a\u00e7\u0131k\u00e7a g\u00f6sterir. Bu format, geli\u015ftiricinin nesnenin tam olarak ne i\u00e7erdi\u011fini ve nas\u0131l olu\u015fturuldu\u011funu bir bak\u0131\u015fta anlamas\u0131na olanak tan\u0131r. \u0130deal olarak, <code>__repr__()<\/code> taraf\u0131ndan d\u00f6nd\u00fcr\u00fclen string, <code>eval()<\/code> fonksiyonu ile y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fcnde orijinal nesneye e\u015fit bir nesne olu\u015fturabilmelidir. \u00d6rne\u011fin:<\/p>\n<pre><code>\nkitap_yeniden = eval(repr(kitap1))\nprint(kitap_yeniden.baslik) # Sefiller\n<\/code><\/pre>\n<p>Bu &#8220;<code>eval()<\/code>-edilebilir&#8221; \u00f6zellik, <code>__repr__()<\/code>&#8216;nin g\u00fcc\u00fcn\u00fc g\u00f6sterir, ancak g\u00fcvenlik endi\u015feleri nedeniyle her zaman <code>eval()<\/code> kullanmaktan ka\u00e7\u0131n\u0131lmal\u0131d\u0131r. As\u0131l ama\u00e7, stringin kendisinin geli\u015ftiriciye nesne hakk\u0131nda tam ve do\u011fru bilgi vermesidir. <code>__repr__()<\/code>&#8216;de string de\u011ferleri tek t\u0131rnak (<code>'<\/code>) ile \u00e7evrelemek ve nesnenin \u00f6zelliklerini anahtar-de\u011fer \u00e7iftleri olarak g\u00f6stermek yayg\u0131n bir pratiktir. Bu, stringin belirsizli\u011fini ortadan kald\u0131r\u0131r ve kodun daha kolay anla\u015f\u0131lmas\u0131n\u0131 sa\u011flar. Sonu\u00e7 olarak, her zaman <code>__repr__()<\/code> metodunu tan\u0131mlaman\u0131z \u00f6nerilir. E\u011fer <code>__str__()<\/code> tan\u0131mlamazsan\u0131z, Python varsay\u0131lan olarak <code>__repr__()<\/code>&#8216;yi \u00e7a\u011f\u0131r\u0131r. Bu, en az\u0131ndan geli\u015ftirici dostu bir \u00e7\u0131kt\u0131n\u0131z olmas\u0131n\u0131 sa\u011flar. Bu sayede, hata ay\u0131klama ve kod analizi s\u00fcre\u00e7leriniz \u00f6nemli \u00f6l\u00e7\u00fcde kolayla\u015facakt\u0131r.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131: __str__() ve __repr__() Metotlar\u0131n\u0131n Pratik Kullan\u0131mlar\u0131<\/h2>\n<p><code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131n\u0131 teorik olarak anlamak \u00f6nemli olsa da, bu metotlar\u0131n ger\u00e7ek d\u00fcnya uygulamalar\u0131nda nas\u0131l de\u011fer katt\u0131\u011f\u0131n\u0131 g\u00f6rmek, onlar\u0131n g\u00fcc\u00fcn\u00fc tam olarak kavramam\u0131z\u0131 sa\u011flar. Bu b\u00f6l\u00fcmde, bu iki metodun farkl\u0131 senaryolarda nas\u0131l kullan\u0131labilece\u011fine dair vaka analizleri sunaca\u011f\u0131z.<\/p>\n<h3>Vaka Analizi 1: Loglama Sistemleri ve Hata Ay\u0131klama<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirmenin ayr\u0131lmaz bir par\u00e7as\u0131 olan loglama, uygulamalar\u0131n \u00e7al\u0131\u015fma zaman\u0131ndaki davran\u0131\u015flar\u0131n\u0131 izlemek ve olas\u0131 hatalar\u0131 tespit etmek i\u00e7in kullan\u0131l\u0131r. Loglama sistemlerinde, nesnelerin durumunu kaydetmek s\u0131kl\u0131kla kar\u015f\u0131la\u015f\u0131lan bir durumdur. \u0130\u015fte burada <code>__repr__()<\/code> metodu parlar. Loglara genellikle bir hatan\u0131n meydana geldi\u011fi andaki nesnenin tam durumu yaz\u0131l\u0131r. E\u011fer bu log girdileri sadece bellek adreslerini i\u00e7erseydi, hatan\u0131n nedenini bulmak imkans\u0131z hale gelirdi.<\/p>\n<p>Bir e-ticaret uygulamas\u0131nda bir <code>Siparis<\/code> nesnesini ele alal\u0131m. Bir sipari\u015f i\u015flenirken bir hata olu\u015ftu\u011funu varsayal\u0131m ve bu hatay\u0131 loglamak istiyoruz. E\u011fer <code>Siparis<\/code> s\u0131n\u0131f\u0131 sadece <code>__str__()<\/code>&#8216;ye sahipse ve o da sadece sipari\u015f ID&#8217;sini d\u00f6nd\u00fcr\u00fcyorsa, log girdisi \u015f\u00f6yle g\u00f6r\u00fcnebilir: &#8220;Sipari\u015f i\u015flenirken hata olu\u015ftu: Sipari\u015f ID: 12345&#8221;. Bu bilgi, hatan\u0131n k\u00f6k nedenini anlamak i\u00e7in yeterli olmayabilir. Ancak, <code>__repr__()<\/code> metodunu tan\u0131mlarsak, log girdisi \u00e7ok daha zengin ve faydal\u0131 hale gelir:<\/p>\n<pre><code>\nimport logging\n\nlogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')\n\nclass Siparis:\n    def __init__(self, siparis_id, musteri_id, urunler, toplam_fiyat, durum=\"Beklemede\"):\n        self.siparis_id = siparis_id\n        self.musteri_id = musteri_id\n        self.urunler = urunler # \u00f6rn: [{\"urun_adi\": \"Laptop\", \"adet\": 1}]\n        self.toplam_fiyat = toplam_fiyat\n        self.durum = durum\n\n    def __str__(self):\n        return f\"Sipari\u015f ID: {self.siparis_id}, Durum: {self.durum}\"\n\n    def __repr__(self):\n        return (f\"Siparis(siparis_id={self.siparis_id}, musteri_id={self.musteri_id}, \"\n                f\"urunler={self.urunler!r}, toplam_fiyat={self.toplam_fiyat}, durum='{self.durum}')\")\n\n    def islem_yap(self):\n        try:\n            # Sipari\u015f i\u015fleme mant\u0131\u011f\u0131\n            if self.toplam_fiyat &lt; 0:\n                raise ValueError(\"Toplam fiyat negatif olamaz.\")\n            self.durum = \"Tamamland\u0131\"\n            logging.info(f\"Sipari\u015f ba\u015far\u0131yla i\u015flendi: {self!s}\") # Kullan\u0131c\u0131 dostu log\n        except Exception as e:\n            self.durum = \"Hata\"\n            logging.error(f\"Sipari\u015f i\u015flenirken hata olu\u015ftu: {self!r}. Hata: {e}\") # Geli\u015ftirici dostu log\n\nsiparis_ornegi = Siparis(1001, 500, [{\"urun_adi\": \"Klavye\", \"adet\": 1}], 150.0)\nsiparis_ornegi.islem_yap()\n\nhatali_siparis = Siparis(1002, 501, [{\"urun_adi\": \"Mouse\", \"adet\": 1}], -50.0)\nhatali_siparis.islem_yap()\n<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>logging.info<\/code> \u00e7a\u011fr\u0131s\u0131nda <code>{self!s}<\/code> kullanarak <code>__str__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131, <code>logging.error<\/code> \u00e7a\u011fr\u0131s\u0131nda ise <code>{self!r}<\/code> kullanarak <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 logluyoruz. Bu sayede, ba\u015far\u0131l\u0131 i\u015flemlerde okunabilir bir \u00f6zet sunarken, hata durumlar\u0131nda geli\u015ftiricinin sorunu te\u015fhis etmesi i\u00e7in gerekli t\u00fcm detaylar\u0131 sa\u011flayan bir \u00e7\u0131kt\u0131 elde ederiz. <code>__repr__()<\/code> sayesinde, bir hata loguna bakt\u0131\u011f\u0131n\u0131zda, sipari\u015fin t\u00fcm \u00f6zelliklerini (m\u00fc\u015fteri ID, \u00fcr\u00fcnler, toplam fiyat vb.) an\u0131nda g\u00f6rebilir ve hatan\u0131n k\u00f6k nedenini \u00e7ok daha h\u0131zl\u0131 bir \u015fekilde bulabilirsiniz. Bu, hata ay\u0131klama s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve geli\u015ftirme verimlili\u011fini art\u0131r\u0131r.<\/p>\n<h3>Vaka Analizi 2: API Yan\u0131tlar\u0131 ve Veri Serile\u015ftirme<\/h3>\n<p>Web servisleri ve API&#8217;ler, verileri genellikle JSON veya XML format\u0131nda d\u00f6nd\u00fcr\u00fcr. Bu verilerin kullan\u0131c\u0131ya sunulmadan \u00f6nce veya bir d\u0131\u015f sisteme g\u00f6nderilmeden \u00f6nce okunabilir bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi gerekebilir. Burada <code>__str__()<\/code> metodunun g\u00fcc\u00fc devreye girer. Bir API&#8217;den gelen verileri temsil eden bir Python nesneniz oldu\u011funu d\u00fc\u015f\u00fcnelim. Bu nesneyi do\u011frudan bir web sayfas\u0131nda veya bir e-posta bildiriminde g\u00f6stermek istedi\u011finizde, kullan\u0131c\u0131 dostu bir string temsiline ihtiyac\u0131n\u0131z olur.<\/p>\n<p>\u00d6rne\u011fin, bir hava durumu API&#8217;sinden gelen verileri temsil eden bir <code>HavaDurumu<\/code> s\u0131n\u0131f\u0131m\u0131z olsun. Bu nesneyi bir web sayfas\u0131nda kullan\u0131c\u0131ya g\u00f6stermek i\u00e7in <code>__str__()<\/code> metodunu kullanabiliriz:<\/p>\n<pre><code>\nimport json\n\nclass HavaDurumu:\n    def __init__(self, sehir, sicaklik, durum, nem_orani):\n        self.sehir = sehir\n        self.sicaklik = sicaklik\n        self.durum = durum\n        self.nem_orani = nem_orani\n\n    def __str__(self):\n        return (f\"{self.sehir} \u015fehrinde hava {self.sicaklik}\u00b0C ve {self.durum}. \"\n                f\"Nem oran\u0131: %{self.nem_orani}.\")\n\n    def __repr__(self):\n        return (f\"HavaDurumu(sehir='{self.sehir}', sicaklik={self.sicaklik}, \"\n                f\"durum='{self.durum}', nem_orani={self.nem_orani})\")\n\n    def to_json(self):\n        # Nesneyi JSON format\u0131na serile\u015ftirme\n        return json.dumps({\n            \"sehir\": self.sehir,\n            \"sicaklik\": self.sicaklik,\n            \"durum\": self.durum,\n            \"nem_orani\": self.nem_orani\n        }, ensure_ascii=False, indent=2)\n\n# API'den geldi\u011fini varsayd\u0131\u011f\u0131m\u0131z veri\nhava_verisi = HavaDurumu(\"Ankara\", 15, \"Par\u00e7al\u0131 Bulutlu\", 65)\n\n# Kullan\u0131c\u0131ya g\u00f6sterilecek \u00e7\u0131kt\u0131\nprint(f\"Bug\u00fcnk\u00fc hava durumu: {hava_verisi}\")\n\n# Loglama veya geli\u015ftirici incelemesi i\u00e7in\nprint(f\"Geli\u015ftirici temsili: {repr(hava_verisi)}\")\n\n# API yan\u0131t\u0131 olarak JSON\nprint(\"\\nAPI Yan\u0131t\u0131 (JSON):\")\nprint(hava_verisi.to_json())\n<\/code><\/pre>\n<p>Bu senaryoda, <code>__str__()<\/code> metodu sayesinde <code>print(f\"Bug\u00fcnk\u00fc hava durumu: {hava_verisi}\")<\/code> \u00e7\u0131kt\u0131s\u0131 do\u011frudan kullan\u0131c\u0131ya sunulabilecek, anla\u015f\u0131l\u0131r bir c\u00fcmleye d\u00f6n\u00fc\u015f\u00fcr. \u00d6rne\u011fin: &#8220;Ankara \u015fehrinde hava 15\u00b0C ve Par\u00e7al\u0131 Bulutlu. Nem oran\u0131: %65.&#8221; Bu, API&#8217;den gelen ham verilerin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 kullan\u0131c\u0131dan gizleyerek daha iyi bir deneyim sunar. <code>to_json()<\/code> metodu ise nesnenin verilerini programatik olarak i\u015flenebilecek bir JSON format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcrken, <code>__str__()<\/code> bu JSON&#8217;un insan taraf\u0131ndan okunabilen bir \u00f6zetini sa\u011flar. \u00d6zetle, <code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131, Python nesnelerinin farkl\u0131 ba\u011flamlarda (kullan\u0131c\u0131ya sunum, geli\u015ftirici hata ay\u0131klama, loglama) nas\u0131l temsil edilece\u011fini esnek bir \u015fekilde kontrol etmemizi sa\u011flayarak, uygulamalar\u0131m\u0131z\u0131n genel kalitesini ve y\u00f6netilebilirli\u011fini art\u0131r\u0131r.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve P\u00fcf Noktalar\u0131: Daha G\u00fc\u00e7l\u00fc G\u00f6sterimler \u0130\u00e7in Ne Yapmal\u0131s\u0131n\u0131z?<\/h2>\n<p><code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131n\u0131n temel kullan\u0131mlar\u0131n\u0131 anlad\u0131ktan sonra, bu b\u00f6l\u00fcmde daha ileri d\u00fczey konulara ve pratik ipu\u00e7lar\u0131na de\u011finece\u011fiz. Bu ipu\u00e7lar\u0131, nesne temsillerinizi daha sa\u011flam, esnek ve Pythonik hale getirmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>1. __str__()&#8217;nin __repr__()&#8217;yi \u00c7a\u011f\u0131rmas\u0131 ve Tek Tan\u0131mlama Prensibi<\/h3>\n<p>Daha \u00f6nce de belirtti\u011fimiz gibi, e\u011fer bir s\u0131n\u0131fta <code>__str__()<\/code> metodu tan\u0131mlanmam\u0131\u015fsa, Python varsay\u0131lan olarak <code>__repr__()<\/code> metodunu kullan\u0131r. Bu durum, her zaman hem kullan\u0131c\u0131 hem de geli\u015ftirici i\u00e7in ayr\u0131 ayr\u0131 string&#8217;ler tan\u0131mlamak istemedi\u011finizde kullan\u0131\u015fl\u0131 olabilir. Baz\u0131 durumlarda, <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 hem geli\u015ftirici i\u00e7in yeterince bilgilendirici hem de kullan\u0131c\u0131 i\u00e7in yeterince anla\u015f\u0131l\u0131r olabilir. Bu durumda, sadece <code>__repr__()<\/code>&#8216;yi tan\u0131mlayarak ve <code>__str__()<\/code>&#8216;yi tan\u0131mlamadan bu davran\u0131\u015f\u0131 kullanabilirsiniz.<\/p>\n<p>Ancak, e\u011fer <code>__str__()<\/code>&#8216;nin \u00e7\u0131kt\u0131s\u0131 <code>__repr__()<\/code>&#8216;den farkl\u0131 olacaksa, her ikisini de tan\u0131mlaman\u0131z en iyisidir. Hatta, <code>__str__()<\/code>&#8216;yi tan\u0131mlarken, <code>__repr__()<\/code>&#8216;den baz\u0131 bilgileri yeniden kullanmak isteyebilirsiniz. Python&#8217;da, <code>__str__()<\/code> metodunun <code>__repr__()<\/code> metodunu \u00e7a\u011f\u0131rmas\u0131 yayg\u0131n bir pratiktir, \u00f6zellikle <code>__str__()<\/code>&#8216;nin daha k\u0131sa veya daha az resmi bir versiyonu olmas\u0131 gerekti\u011finde. Bu, kod tekrar\u0131n\u0131 azaltmaya yard\u0131mc\u0131 olur:<\/p>\n<pre><code>\nclass Urun:\n    def __init__(self, kod, ad, fiyat):\n        self.kod = kod\n        self.ad = ad\n        self.fiyat = fiyat\n\n    def __repr__(self):\n        return f\"Urun(kod='{self.kod}', ad='{self.ad}', fiyat={self.fiyat:.2f})\"\n\n    def __str__(self):\n        # __repr__()'den daha k\u0131sa ve kullan\u0131c\u0131 dostu bir versiyon\n        return f\"{self.ad} (Kod: {self.kod})\"\n\nurun = Urun(\"P001\", \"Ak\u0131ll\u0131 Telefon\", 4999.99)\nprint(urun)       # Ak\u0131ll\u0131 Telefon (Kod: P001)\nprint(repr(urun)) # Urun(kod='P001', ad='Ak\u0131ll\u0131 Telefon', fiyat=4999.99)\n<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, iki metodun ama\u00e7lar\u0131n\u0131 birbirinden ay\u0131r\u0131rken, kodun bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. \u00d6zellikle <code>__repr__()<\/code>, nesnenin t\u00fcm \u00f6nemli \u00f6zelliklerini i\u00e7erdi\u011finden, <code>__str__()<\/code> i\u00e7in bir temel olu\u015fturabilir.<\/p>\n<h3>2. D\u00f6ng\u00fcsel Referanslar ve Potansiyel Sorunlar<\/h3>\n<p>Nesneler aras\u0131nda d\u00f6ng\u00fcsel referanslar (\u00f6rne\u011fin, A nesnesi B&#8217;ye referans verirken, B nesnesi de A&#8217;ya referans veriyorsa) oldu\u011funda, <code>__str__()<\/code> veya <code>__repr__()<\/code> metotlar\u0131n\u0131n sonsuz d\u00f6ng\u00fcye girmesi potansiyeli vard\u0131r. E\u011fer bir nesnenin string temsilini olu\u015ftururken, o nesnenin referans verdi\u011fi ba\u015fka bir nesnenin string temsilini de olu\u015fturmaya \u00e7al\u0131\u015f\u0131rsan\u0131z ve bu zincir geriye d\u00f6n\u00fcp ba\u015flang\u0131\u00e7taki nesneye ula\u015f\u0131rsa, bir <code>RecursionError<\/code> al\u0131rs\u0131n\u0131z. Bu durumu \u00f6nlemek i\u00e7in, d\u00f6ng\u00fcsel referans i\u00e7eren \u00f6zelliklerin string temsilini olu\u015ftururken dikkatli olmal\u0131 ve ya sadece referans ID&#8217;sini g\u00f6stermeli ya da d\u00f6ng\u00fcy\u00fc k\u0131racak bir mekanizma kullanmal\u0131s\u0131n\u0131z.<\/p>\n<pre><code>\nclass Kisi:\n    def __init__(self, ad, es=None):\n        self.ad = ad\n        self.es = es # E\u015fine referans\n\n    def __repr__(self):\n        # D\u00f6ng\u00fcsel referans sorununu \u00f6nlemek i\u00e7in e\u015fin sadece ad\u0131n\u0131 veya ID'sini g\u00f6ster\n        es_repr = f\"'{self.es.ad}'\" if self.es else \"None\"\n        return f\"Kisi(ad='{self.ad}', es={es_repr})\"\n\n# D\u00f6ng\u00fcsel referans olu\u015ftural\u0131m\nali = Kisi(\"Ali\")\nayse = Kisi(\"Ay\u015fe\", es=ali)\nali.es = ayse # Ali'nin e\u015fi Ay\u015fe, Ay\u015fe'nin e\u015fi Ali\n\n# Bu, sonsuz d\u00f6ng\u00fcye girmez \u00e7\u00fcnk\u00fc es_repr sadece ismi kullan\u0131r\nprint(repr(ali))\nprint(repr(ayse))\n<\/code><\/pre>\n<h3>3. Performans Etkileri<\/h3>\n<p><code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131, nesnelerin metinsel temsillerini olu\u015fturmak i\u00e7in belirli bir i\u015flem s\u00fcresi gerektirir. \u00c7o\u011fu zaman bu etki ihmal edilebilir d\u00fczeydedir. Ancak, e\u011fer nesneniz \u00e7ok say\u0131da \u00f6zelli\u011fe sahipse, bu \u00f6zelliklerin her birini string&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek veya karma\u015f\u0131k hesaplamalar yapmak performans\u0131 etkileyebilir. \u00d6zellikle yo\u011fun loglama yap\u0131lan veya binlerce nesnenin ayn\u0131 anda string&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcld\u00fc\u011f\u00fc senaryolarda bu etki belirgin hale gelebilir. Bu gibi durumlarda, string temsilinin sadece en kritik bilgileri i\u00e7ermesine dikkat etmek veya lazy evaluation (tembel de\u011ferlendirme) teknikleri kullanmak faydal\u0131 olabilir.<\/p>\n<h3>4. Dataclasses ve attrs K\u00fct\u00fcphanesi ile Otomatik Temsiller<\/h3>\n<p>Python 3.7 ve sonraki s\u00fcr\u00fcmlerde tan\u0131t\u0131lan <code>dataclasses<\/code> mod\u00fcl\u00fc ve pop\u00fcler \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphanesi <code>attrs<\/code>, \u00f6zellikle veri ta\u015f\u0131y\u0131c\u0131 s\u0131n\u0131flar i\u00e7in <code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131n\u0131 otomatik olarak olu\u015fturman\u0131za olanak tan\u0131r. Bu, boilerplate kodu (tekrarlayan kod) yazma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/p>\n<pre><code>\nfrom dataclasses import dataclass\n\n@dataclass\nclass Ogrenci:\n    ad: str\n    soyad: str\n    numara: int\n    ortalama: float = 0.0 # Varsay\u0131lan de\u011fer\n\n# __repr__ ve __str__ otomatik olarak olu\u015fturulur\nogrenci1 = Ogrenci(\"Elif\", \"Demir\", 101, 85.5)\nprint(ogrenci1) # Ogrenci(ad='Elif', soyad='Demir', numara=101, ortalama=85.5)\nprint(repr(ogrenci1)) # Ayn\u0131 \u00e7\u0131kt\u0131, \u00e7\u00fcnk\u00fc dataclass'ta __str__ varsay\u0131lan olarak __repr__'yi kullan\u0131r\n<\/code><\/pre>\n<p><code>dataclass<\/code>&#8216;larda <code>__str__<\/code> varsay\u0131lan olarak <code>__repr__<\/code>&#8216;yi kulland\u0131\u011f\u0131 i\u00e7in, kullan\u0131c\u0131 dostu bir <code>__str__<\/code> istiyorsan\u0131z yine manuel olarak tan\u0131mlaman\u0131z gerekir. Ancak <code>__repr__<\/code> i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. <code>attrs<\/code> k\u00fct\u00fcphanesi de benzer yetenekler sunar ve daha fazla \u00f6zelle\u015ftirme se\u00e7ene\u011fi sa\u011flar.<\/p>\n<div class=\"expert-tip\">\n  Uzman \u0130pucu: Karma\u015f\u0131k nesnelerin <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 olu\u015ftururken, her bir \u00f6zelli\u011fin de\u011ferinin de <code>repr()<\/code> fonksiyonu ile temsil edildi\u011finden emin olun (\u00f6rne\u011fin, <code>f\"'{self.ad}'\"<\/code> yerine <code>f\"{self.ad!r}\"<\/code> kullanmak). Bu, string de\u011ferlerin do\u011fru \u015fekilde t\u0131rnak i\u00e7ine al\u0131nmas\u0131n\u0131 ve di\u011fer nesnelerin de geli\u015ftirici dostu temsilini sa\u011flar.\n<\/div>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve ara\u00e7lar, Python nesnelerinizin metinsel temsillerini daha etkin bir \u015fekilde y\u00f6netmenize ve kodunuzun genel kalitesini art\u0131rman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Do\u011fru <code>__str__()<\/code> ve <code>__repr__()<\/code> uygulamalar\u0131, sadece daha okunabilir kod de\u011fil, ayn\u0131 zamanda daha kolay hata ay\u0131klanabilen ve s\u00fcrd\u00fcr\u00fclebilir uygulamalar anlam\u0131na gelir.<\/p>\n<h2>Mobil Uyumluluk ve Eri\u015filebilirlik: \u0130\u00e7eri\u011finiz Her Yerde Nas\u0131l \u0130yi G\u00f6r\u00fcn\u00fcr?<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz web d\u00fcnyas\u0131nda, i\u00e7eri\u011fin farkl\u0131 cihazlarda (masa\u00fcst\u00fc bilgisayarlar, tabletler, ak\u0131ll\u0131 telefonlar) sorunsuz bir \u015fekilde g\u00f6r\u00fcnt\u00fclenmesi hayati \u00f6nem ta\u015f\u0131r. Bu, sadece makalelerin veya web sayfalar\u0131n\u0131n genel d\u00fczeni i\u00e7in de\u011fil, ayn\u0131 zamanda Python nesnelerinizin <code>__str__()<\/code> veya <code>__repr__()<\/code> metotlar\u0131 arac\u0131l\u0131\u011f\u0131yla olu\u015fturdu\u011fu metinsel \u00e7\u0131kt\u0131lar i\u00e7in de ge\u00e7erlidir. \u00d6zellikle uzun veya karma\u015f\u0131k nesne temsilleri, k\u00fc\u00e7\u00fck ekranlarda okunabilirli\u011fi d\u00fc\u015f\u00fcrebilir veya kayd\u0131rma \u00e7ubuklar\u0131na neden olabilir. Bu b\u00f6l\u00fcmde, Python \u00e7\u0131kt\u0131lar\u0131n\u0131n ve genel olarak HTML i\u00e7eri\u011finin mobil uyumlulu\u011funu ve eri\u015filebilirli\u011fini nas\u0131l sa\u011flayaca\u011f\u0131n\u0131z\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>1. Uzun __str__() ve __repr__() \u00c7\u0131kt\u0131lar\u0131n\u0131n Y\u00f6netimi<\/h3>\n<p>Baz\u0131 nesneler, \u00f6zellikle \u00e7ok say\u0131da \u00f6zelli\u011fe sahip olanlar, olduk\u00e7a uzun <code>__repr__()<\/code> \u00e7\u0131kt\u0131lar\u0131 \u00fcretebilir. Bu \u00e7\u0131kt\u0131lar, bir terminalde veya bir web sayfas\u0131nda g\u00f6sterildi\u011finde ekran geni\u015fli\u011fini a\u015fabilir. Mobil cihazlarda bu durum, yatay kayd\u0131rma \u00e7ubuklar\u0131na veya metnin kesilmesine neden olarak kullan\u0131c\u0131 deneyimini olumsuz etkiler. Bu durumu y\u00f6netmek i\u00e7in:<\/p>\n<ul>\n<li><strong>K\u0131sa ve \u00d6z __str__():<\/strong> <code>__str__()<\/code> metodunuzu m\u00fcmk\u00fcn oldu\u011funca k\u0131sa ve \u00f6z tutun. Mobil kullan\u0131c\u0131lar genellikle h\u0131zl\u0131 bilgi arar ve uzun metinleri okumaktan ka\u00e7\u0131n\u0131r.<\/li>\n<li><strong>\u00c7ok Sat\u0131rl\u0131 __repr__():<\/strong> E\u011fer <code>__repr__()<\/code> \u00e7\u0131kt\u0131n\u0131z \u00e7ok uzunsa, onu birden fazla sat\u0131ra yaymay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Python&#8217;da string&#8217;leri parantez i\u00e7inde birle\u015ftirerek bu yap\u0131labilir. Bu, \u00e7\u0131kt\u0131y\u0131 terminalde veya kod edit\u00f6r\u00fcnde daha okunabilir hale getirir. Ancak, bu \u00e7\u0131kt\u0131y\u0131 bir web sayfas\u0131nda g\u00f6stermek i\u00e7in hala HTML\/CSS ile d\u00fczenleme yapman\u0131z gerekebilir.<\/li>\n<li><strong>K\u0131s\u0131tl\u0131 Bilgi Sunumu:<\/strong> Gerekirse, <code>__repr__()<\/code> i\u00e7inde t\u00fcm \u00f6zellikleri g\u00f6stermek yerine, sadece en kritik olanlar\u0131 g\u00f6sterin veya uzun listeler\/s\u00f6zl\u00fckler i\u00e7in \u00f6zet bir temsil kullan\u0131n (\u00f6rn: <code>urunler=[...]<\/code> yerine <code>urunler=&lt;3 urun&gt;<\/code>).<\/li>\n<\/ul>\n<h3>2. HTML \u0130\u00e7eri\u011finde Kod Bloklar\u0131 ve Metinlerin Mobil Uyumlulu\u011fu<\/h3>\n<p>Python kod \u00f6rnekleri veya nesne temsilleri genellikle <code>&lt;pre&gt;&lt;code&gt;<\/code> etiketleri i\u00e7inde sunulur. Bu bloklar, varsay\u0131lan olarak sat\u0131r sonu yapmaz ve geni\u015f i\u00e7erikleri yatay olarak ta\u015f\u0131r. Mobil uyumluluk i\u00e7in bu bloklar\u0131n ta\u015fmas\u0131n\u0131 engellemek kritik \u00f6neme sahiptir. CSS Media Query&#8217;leri bu noktada devreye girer.<\/p>\n<p>A\u015fa\u011f\u0131daki CSS kodu, kod bloklar\u0131n\u0131n ve uzun metinlerin mobil cihazlarda daha iyi g\u00f6r\u00fcnmesini sa\u011flamak i\u00e7in kullan\u0131labilecek temel bir \u00f6rnektir:<\/p>\n<pre><code class=\"language-css\">\n\/* Genel d\u00fczen i\u00e7in CSS *\/\nbody {\n    font-family: Arial, sans-serif;\n    line-height: 1.6;\n    margin: 0 auto;\n    max-width: 800px;\n    padding: 20px;\n}\n\n\/* Kod bloklar\u0131 i\u00e7in varsay\u0131lan stil *\/\npre {\n    background-color: #f4f4f4;\n    padding: 15px;\n    border-radius: 5px;\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu ekler *\/\n    white-space: pre; \/* Varsay\u0131lan olarak sat\u0131r sonu yapmaz *\/\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar (mobil cihazlar) i\u00e7in Media Query *\/\n@media (max-width: 768px) {\n    body {\n        padding: 10px; \/* Daha az kenar bo\u015flu\u011fu *\/\n    }\n\n    h2, h3 {\n        font-size: 1.2em; \/* Ba\u015fl\u0131k boyutunu k\u00fc\u00e7\u00fclt *\/\n    }\n\n    p {\n        font-size: 0.95em; \/* Paragraf metin boyutunu k\u00fc\u00e7\u00fclt *\/\n    }\n\n    pre {\n        font-size: 0.85em; \/* Kod metin boyutunu k\u00fc\u00e7\u00fclt *\/\n        padding: 10px; \/* Daha az i\u00e7 bo\u015fluk *\/\n        word-wrap: break-word; \/* Uzun kelimeleri b\u00f6ler *\/\n        white-space: pre-wrap; \/* Sat\u0131r sonu yapar *\/\n    }\n\n    \/* Uzman \u0130pucu kutusu i\u00e7in mobil uyumluluk *\/\n    .expert-tip {\n        margin: 10px 0;\n        padding: 10px;\n        font-size: 0.9em;\n    }\n}\n<\/code><\/pre>\n<p>Yukar\u0131daki CSS \u00f6rne\u011fi, <code>@media (max-width: 768px)<\/code> kural\u0131n\u0131 kullanarak taray\u0131c\u0131 penceresi 768 pikselden daha dar oldu\u011funda belirli stilleri uygular. \u00d6zellikle <code>pre { overflow-x: auto; white-space: pre-wrap; word-wrap: break-word; }<\/code> gibi \u00f6zellikler, uzun kod sat\u0131rlar\u0131n\u0131n veya nesne temsillerinin k\u00fc\u00e7\u00fck ekranlarda yatay kayd\u0131rma \u00e7ubuklar\u0131na neden olmak yerine, otomatik olarak alt sat\u0131ra ge\u00e7mesini veya kelimeleri b\u00f6lmesini sa\u011flar. Bu, i\u00e7eri\u011fin daha eri\u015filebilir olmas\u0131n\u0131 ve kullan\u0131c\u0131lar\u0131n metni okumak i\u00e7in s\u00fcrekli yatay kayd\u0131rma yapmak zorunda kalmamas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>3. Eri\u015filebilirlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Mobil uyumlulu\u011fun yan\u0131 s\u0131ra, i\u00e7eri\u011finizin eri\u015filebilir olmas\u0131 da \u00f6nemlidir:<\/p>\n<ul>\n<li><strong>Yeterli Kontrast:<\/strong> Metin ve arka plan renkleri aras\u0131nda yeterli kontrast sa\u011flay\u0131n. Bu, g\u00f6rme engelli kullan\u0131c\u0131lar\u0131n metni daha kolay okumas\u0131n\u0131 sa\u011flar.<\/li>\n<li><strong>Anlaml\u0131 Ba\u015fl\u0131klar:<\/strong> H2 ve H3 etiketlerini anlaml\u0131 ve a\u00e7\u0131klay\u0131c\u0131 ba\u015fl\u0131klar i\u00e7in kullan\u0131n. Ekran okuyucular, i\u00e7eri\u011fin yap\u0131s\u0131n\u0131 anlamak i\u00e7in ba\u015fl\u0131klara g\u00fcvenir.<\/li>\n<li><strong>Resimler i\u00e7in Alt Metin:<\/strong> E\u011fer makalenizde g\u00f6rsel betimlemeler olsayd\u0131, her zaman <code>&lt;img&gt;<\/code> etiketleri i\u00e7in a\u00e7\u0131klay\u0131c\u0131 <code>alt<\/code> metinleri eklemelisiniz.<\/li>\n<li><strong>Klavye Navigasyonu:<\/strong> \u0130nteraktif \u00f6\u011feler olsayd\u0131, klavye ile eri\u015filebilir olmalar\u0131n\u0131 sa\u011flamak gerekirdi.<\/li>\n<\/ul>\n<p>Sonu\u00e7 olarak, Python nesnelerinizin <code>__str__()<\/code> ve <code>__repr__()<\/code> metotlar\u0131 arac\u0131l\u0131\u011f\u0131yla olu\u015fturdu\u011fu metinsel temsillerin kalitesi, sadece geli\u015ftirme s\u00fcrecini de\u011fil, ayn\u0131 zamanda bu \u00e7\u0131kt\u0131lar\u0131n sunuldu\u011fu her platformdaki kullan\u0131c\u0131 deneyimini de do\u011frudan etkiler. Hem metotlar\u0131n kendi i\u00e7indeki tasar\u0131m kararlar\u0131 hem de bu \u00e7\u0131kt\u0131lar\u0131 saran HTML\/CSS yap\u0131s\u0131n\u0131n mobil uyumlu olmas\u0131, modern web geli\u015ftiricili\u011finin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, Python&#8217;\u0131n g\u00fc\u00e7l\u00fc \u00f6zel metotlar\u0131 olan <code>__str__()<\/code> ve <code>__repr__()<\/code>&#8216;nin derinliklerine indik. Bu metotlar\u0131n, nesnelerinizin metinsel temsillerini kontrol etmenizi sa\u011flayarak kodunuzun okunabilirli\u011fini, anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 ve hata ay\u0131klama kolayl\u0131\u011f\u0131n\u0131 nas\u0131l art\u0131rd\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. <code>__str__()<\/code>&#8216;nin kullan\u0131c\u0131 dostu, okunabilir \u00e7\u0131kt\u0131lar i\u00e7in, <code>__repr__()<\/code>&#8216;nin ise geli\u015ftirici odakl\u0131, belirsizli\u011fe yer b\u0131rakmayan ve m\u00fcmk\u00fcnse nesneyi yeniden olu\u015fturabilecek \u00e7\u0131kt\u0131lar i\u00e7in tasarland\u0131\u011f\u0131n\u0131 \u00f6\u011frendik. Ger\u00e7ek d\u00fcnya senaryolar\u0131 ve ileri d\u00fczey ipu\u00e7lar\u0131 ile bu metotlar\u0131n pratik uygulamalar\u0131n\u0131 g\u00f6rd\u00fck, ayr\u0131ca mobil uyumluluk gibi modern geli\u015ftirme pratikleriyle nas\u0131l entegre edilebilece\u011fini de tart\u0131\u015ft\u0131k.<\/p>\n<p>Do\u011fru <code>__str__()<\/code> ve <code>__repr__()<\/code> uygulamalar\u0131, sadece daha temiz ve profesyonel bir kod yazman\u0131z\u0131 sa\u011flamakla kalmaz, ayn\u0131 zamanda tak\u0131m i\u00e7inde ileti\u015fimi kolayla\u015ft\u0131r\u0131r, hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve uygulaman\u0131z\u0131n genel kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde y\u00fckseltir. Unutmay\u0131n, iyi bir nesne temsili, binlerce sat\u0131r logu incelemekten veya saatlerce hata ay\u0131klamaktan sizi kurtarabilir. Bu nedenle, kendi s\u0131n\u0131flar\u0131n\u0131z\u0131 tan\u0131mlarken bu iki metodu her zaman g\u00f6z \u00f6n\u00fcnde bulundurmak, iyi bir Python geli\u015ftiricisi olman\u0131n temel ad\u0131mlar\u0131ndan biridir. \u015eimdi, konuyu peki\u015ftirmek i\u00e7in s\u0131k\u00e7a sorulan baz\u0131 sorulara g\u00f6z atal\u0131m.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n        <strong><code>__str__()<\/code> tan\u0131mlamazsam ne olur?<\/strong><\/p>\n<p>E\u011fer bir s\u0131n\u0131fta <code>__str__()<\/code> metodu tan\u0131mlamazsan\u0131z, Python varsay\u0131lan olarak <code>__repr__()<\/code> metodunu \u00e7a\u011f\u0131r\u0131r. E\u011fer <code>__repr__()<\/code> de tan\u0131ml\u0131 de\u011filse, nesnenin bellek adresini i\u00e7eren varsay\u0131lan bir \u00e7\u0131kt\u0131 (<code>&lt;__main__.ClassName object at 0x...&gt;<\/code>) al\u0131rs\u0131n\u0131z.<\/p>\n<\/li>\n<li>\n        <strong><code>__repr__()<\/code> tan\u0131mlamazsam ne olur?<\/strong><\/p>\n<p>E\u011fer bir s\u0131n\u0131fta <code>__repr__()<\/code> metodu tan\u0131mlamazsan\u0131z, Python yine varsay\u0131lan olarak nesnenin bellek adresini i\u00e7eren \u00e7\u0131kt\u0131y\u0131 d\u00f6nd\u00fcr\u00fcr (<code>&lt;__main__.ClassName object at 0x...&gt;<\/code>). Bu, hata ay\u0131klama s\u0131ras\u0131nda nesnenin i\u00e7eri\u011fini anlamay\u0131 zorla\u015ft\u0131r\u0131r, \u00e7\u00fcnk\u00fc geli\u015ftiriciye nesnenin durumu hakk\u0131nda hi\u00e7bir bilgi vermez.<\/p>\n<\/li>\n<li>\n        <strong>Her ikisini de tan\u0131mlamak zorunda m\u0131y\u0131m?<\/strong><\/p>\n<p>Teknik olarak &#8220;zorunda&#8221; de\u011filsiniz, ancak iyi bir uygulama olarak <strong>her zaman <code>__repr__()<\/code> metodunu tan\u0131mlaman\u0131z \u015fiddetle tavsiye edilir<\/strong>. E\u011fer <code>__str__()<\/code> \u00e7\u0131kt\u0131s\u0131 <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131ndan farkl\u0131 olacaksa (yani kullan\u0131c\u0131ya daha okunabilir bir temsil sunmak istiyorsan\u0131z), o zaman <code>__str__()<\/code>&#8216;yi de tan\u0131mlamal\u0131s\u0131n\u0131z. E\u011fer <code>__repr__()<\/code> \u00e7\u0131kt\u0131n\u0131z hem geli\u015ftirici hem de kullan\u0131c\u0131 i\u00e7in yeterince iyiyse, sadece <code>__repr__()<\/code> tan\u0131mlay\u0131p <code>__str__()<\/code>&#8216;yi atlayabilirsiniz.<\/p>\n<\/li>\n<li>\n        <strong>Ne zaman <code>__str__()<\/code> ne zaman <code>__repr__()<\/code> kullanmal\u0131y\u0131m?<\/strong><\/p>\n<ul>\n<li><strong><code>__str__()<\/code>:<\/strong> <code>print()<\/code> fonksiyonu, <code>str()<\/code> yerle\u015fik fonksiyonu, f-string&#8217;ler (<code>f\"{nesne}\"<\/code>), loglama sistemlerinde kullan\u0131c\u0131ya y\u00f6nelik mesajlar, kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6sterilecek metinler veya raporlar gibi &#8220;insan taraf\u0131ndan okunabilir&#8221; \u00e7\u0131kt\u0131lar i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><strong><code>__repr__()<\/code>:<\/strong> Python&#8217;\u0131n etkile\u015fimli kabu\u011fu (REPL), <code>repr()<\/code> yerle\u015fik fonksiyonu, hata ay\u0131klay\u0131c\u0131lar, loglama sistemlerinde geli\u015ftiriciye y\u00f6nelik detayl\u0131 hata mesajlar\u0131 veya nesneyi yeniden olu\u015fturabilecek kesin bir string temsil gerekti\u011finde kullan\u0131l\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li>\n        <strong><code>__str__()<\/code> ve <code>__repr__()<\/code>&#8216;nin performans etkisi var m\u0131d\u0131r?<\/strong><\/p>\n<p>Evet, her iki metot da bir string olu\u015fturmak i\u00e7in belirli bir i\u015flem s\u00fcresi gerektirir. \u00c7o\u011fu durumda bu etki ihmal edilebilir d\u00fczeydedir. Ancak, e\u011fer nesneniz \u00e7ok say\u0131da karma\u015f\u0131k \u00f6zelli\u011fe sahipse ve bu metotlar s\u0131k\u00e7a \u00e7a\u011fr\u0131l\u0131yorsa (\u00f6rne\u011fin, binlerce nesnenin bir d\u00f6ng\u00fcde string&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi), performans \u00fczerinde g\u00f6zle g\u00f6r\u00fcl\u00fcr bir etkisi olabilir. Bu gibi durumlarda, string temsilinin sadece en kritik bilgileri i\u00e7ermesine dikkat etmek veya daha performansl\u0131 alternatifler d\u00fc\u015f\u00fcnmek faydal\u0131 olabilir.<\/p>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"Python&#8217;da __str__() ve __repr__() Metotlar\u0131 Nas\u0131l Kullan\u0131l\u0131r? Python&#8217;da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-31354","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?<\/title>\n<meta name=\"description\" content=\"Python&#039;da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Python&#039;da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T21:23:08+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?\",\"datePublished\":\"2025-10-08T21:23:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\"},\"wordCount\":4479,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\",\"name\":\"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T21:23:08+00:00\",\"description\":\"Python'da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?","description":"Python'da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?","og_description":"Python'da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T21:23:08+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?","datePublished":"2025-10-08T21:23:08+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/"},"wordCount":4479,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/","name":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T21:23:08+00:00","description":"Python'da nesnelerinizi daha anla\u015f\u0131l\u0131r ve y\u00f6netilebilir hale getirmek mi istiyorsunuz? Bu makale, __str__() ve __repr__() metotlar\u0131n\u0131n ne i\u015fe yarad\u0131\u011f\u0131n\u0131, aralar\u0131ndaki farklar\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l etkin bir \u015fekilde kullanabilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r. Okunabilirli\u011fi art\u0131r\u0131n, hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kodunuzu profesyonel bir seviyeye ta\u015f\u0131y\u0131n.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-python-nesnelerinizi-daha-anlasilir-hale-getirmek-icin-neden-__str__-ve-__repr__-kullanmalisiniz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Python Nesnelerinizi Daha Anla\u015f\u0131l\u0131r Hale Getirmek \u0130\u00e7in Neden __str__() ve __repr__() Kullanmal\u0131s\u0131n\u0131z?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31354"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31354\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}