{"id":31321,"date":"2025-10-08T16:25:25","date_gmt":"2025-10-08T13:25:25","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/"},"modified":"2025-10-08T16:25:25","modified_gmt":"2025-10-08T13:25:25","slug":"python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/","title":{"rendered":"Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? `__str__()` ve `__repr__()` Nedir?"},"content":{"rendered":"<p><title>__str__() ve __repr__() Metotlar\u0131: Python&#8217;da Nesneleri Anla\u015f\u0131l\u0131r K\u0131lma<\/title><\/p>\n<p><body><\/p>\n<p>Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.<\/p>\n<h2>Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> Nedir?<\/h2>\n<p>Python, nesne y\u00f6nelimli bir programlama dilidir ve neredeyse her \u015fey bir nesnedir. Kendi \u00f6zel s\u0131n\u0131flar\u0131n\u0131z\u0131 tan\u0131mlad\u0131\u011f\u0131n\u0131zda, bu s\u0131n\u0131flardan t\u00fcretti\u011finiz nesneleri ekrana yazd\u0131rmak veya hata ay\u0131klama s\u0131ras\u0131nda incelemek isteyebilirsiniz. Ancak varsay\u0131lan olarak, Python nesneleri i\u00e7in pek de bilgilendirici olmayan bir \u00e7\u0131kt\u0131 sunar. \u00d6rne\u011fin:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, sayfa_sayisi):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.sayfa_sayisi = sayfa_sayisi\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1488)\nprint(kitap1)\n  <\/code><\/pre>\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda muhtemelen \u015f\u00f6yle bir \u00e7\u0131kt\u0131 alacaks\u0131n\u0131z:<\/p>\n<pre><code>\n&lt;__main__.Kitap object at 0x103a89e10&gt;\n  <\/code><\/pre>\n<p>Bu \u00e7\u0131kt\u0131, nesnenin bellekteki adresini g\u00f6sterir ve geli\u015ftiriciye veya son kullan\u0131c\u0131ya nesnenin i\u00e7eri\u011fi hakk\u0131nda hi\u00e7bir bilgi vermez. \u0130\u015fte bu problemi \u00e7\u00f6zmek i\u00e7in Python, nesnelerin string temsilini \u00f6zelle\u015ftirmemize olanak tan\u0131yan iki \u00f6zel metot sunar: <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code>. Bu metotlar, nesnenizin kendisini bir string olarak nas\u0131l ifade edece\u011fini belirlemenizi sa\u011flar, b\u00f6ylece kodunuz daha anla\u015f\u0131l\u0131r, hata ay\u0131klama s\u00fcre\u00e7leriniz daha verimli hale gelir.<\/p>\n<h3><code class=\"language-\">__str__()<\/code> Metodu: Kullan\u0131c\u0131 Dostu Temsil<\/h3>\n<p><code class=\"language-\">__str__()<\/code> metodu, bir nesnenin &#8220;resmi olmayan&#8221; veya &#8220;kullan\u0131c\u0131 dostu&#8221; string temsilini d\u00f6nd\u00fcrmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Genellikle <code class=\"language-\">print()<\/code> fonksiyonu veya <code class=\"language-\">str()<\/code> yerle\u015fik fonksiyonu \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda bu metot kullan\u0131l\u0131r. Amac\u0131, son kullan\u0131c\u0131lar\u0131n veya di\u011fer geli\u015ftiricilerin kolayca anlayabilece\u011fi, okunabilir bir \u00e7\u0131kt\u0131 sa\u011flamakt\u0131r. Bu \u00e7\u0131kt\u0131, nesnenin t\u00fcm detaylar\u0131n\u0131 i\u00e7ermek zorunda de\u011fildir; daha ziyade, nesnenin temel \u00f6zelliklerini \u00f6zetleyen k\u0131sa ve \u00f6z bir a\u00e7\u0131klama olmal\u0131d\u0131r. \u00d6rne\u011fin, bir <code class=\"language-\">Kitap<\/code> nesnesi i\u00e7in <code class=\"language-\">__str__()<\/code> metodu, &#8220;Sefiller (Victor Hugo)&#8221; gibi bir \u00e7\u0131kt\u0131 verebilir.<\/p>\n<h3><code class=\"language-\">__repr__()<\/code> Metodu: Geli\u015ftirici Dostu ve Kesin Temsil<\/h3>\n<p>\u00d6te yandan, <code class=\"language-\">__repr__()<\/code> metodu, bir nesnenin &#8220;resmi&#8221; veya &#8220;geli\u015ftirici dostu&#8221; string temsilini d\u00f6nd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Bu metot, genellikle <code class=\"language-\">repr()<\/code> yerle\u015fik fonksiyonu veya interaktif Python konsolunda bir nesne do\u011frudan yaz\u0131ld\u0131\u011f\u0131nda \u00e7a\u011fr\u0131l\u0131r. <code class=\"language-\">__repr__()<\/code>&#8216;\u0131n temel amac\u0131, geli\u015ftiricinin nesneyi tekrar olu\u015fturmak i\u00e7in kullanabilece\u011fi kesin bir string \u00e7\u0131kt\u0131s\u0131 sa\u011flamakt\u0131r. \u0130deal olarak, <code class=\"language-\">eval(repr(obj)) == obj<\/code> ko\u015fulunun do\u011fru olmas\u0131 beklenir (tabii <code class=\"language-\">obj<\/code>&#8216;nin i\u00e7eri\u011fi buna uygunsa). Bu, hata ay\u0131klama ve loglama s\u00fcre\u00e7lerinde son derece de\u011ferlidir \u00e7\u00fcnk\u00fc nesnenin tam durumunu g\u00f6sterir. \u00d6rne\u011fin, bir <code class=\"language-\">Kitap<\/code> nesnesi i\u00e7in <code class=\"language-\">__repr__()<\/code> metodu, &#8220;<code>Kitap(baslik='Sefiller', yazar='Victor Hugo', sayfa_sayisi=1488)<\/code>&#8221; gibi bir \u00e7\u0131kt\u0131 verebilir.<\/p>\n<p>Her iki metot da bir string d\u00f6nd\u00fcrmelidir. E\u011fer bir s\u0131n\u0131fta ne <code class=\"language-\">__str__()<\/code> ne de <code class=\"language-\">__repr__()<\/code> tan\u0131mlanmam\u0131\u015fsa, Python varsay\u0131lan olarak nesnenin bellek adresini i\u00e7eren o tan\u0131d\u0131k \u00e7\u0131kt\u0131y\u0131 verecektir. Ancak e\u011fer sadece <code class=\"language-\">__repr__()<\/code> tan\u0131mlanm\u0131\u015f ve <code class=\"language-\">__str__()<\/code> tan\u0131mlanmam\u0131\u015fsa, <code class=\"language-\">print()<\/code> ve <code class=\"language-\">str()<\/code> fonksiyonlar\u0131 otomatik olarak <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullan\u0131r. Bu, Python&#8217;\u0131n esnek ve geli\u015ftirici dostu yakla\u015f\u0131m\u0131n\u0131n bir par\u00e7as\u0131d\u0131r. Bu mekanizma sayesinde, en az\u0131ndan bir geli\u015ftirici dostu temsil tan\u0131mlad\u0131\u011f\u0131n\u0131zda, kullan\u0131c\u0131 dostu bir temsiliniz olmasa bile varsay\u0131lan olarak anlaml\u0131 bir \u00e7\u0131kt\u0131 elde edersiniz. \u015eimdi gelin, bu metotlar\u0131 ad\u0131m ad\u0131m nas\u0131l uygulayaca\u011f\u0131m\u0131za bakal\u0131m.<\/p>\n<h2><code class=\"language-\">__str__()<\/code> Metodunu Nas\u0131l Uygular\u0131z? Pratik Bir \u00d6rnek<\/h2>\n<p><code class=\"language-\">__str__()<\/code> metodunu uygulamak olduk\u00e7a basittir. S\u0131n\u0131f\u0131n\u0131z\u0131n i\u00e7ine <code class=\"language-\">__str__<\/code> ad\u0131nda bir metot tan\u0131mlaman\u0131z ve bu metodun bir string d\u00f6nd\u00fcrmesini sa\u011flaman\u0131z yeterlidir. \u0130\u015fte <code class=\"language-\">Kitap<\/code> s\u0131n\u0131f\u0131m\u0131z i\u00e7in bir \u00f6rnek:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, sayfa_sayisi):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.sayfa_sayisi = sayfa_sayisi\n\n    def __str__(self):\n        \"\"\"\n        Kullan\u0131c\u0131 dostu string temsilini d\u00f6nd\u00fcr\u00fcr.\n        print() veya str() fonksiyonu ile \u00e7a\u011fr\u0131l\u0131r.\n        \"\"\"\n        return f\"{self.baslik} ({self.yazar})\"\n\n# Nesne olu\u015fturma\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1488)\nkitap2 = Kitap(\"Su\u00e7 ve Ceza\", \"Fyodor Dostoyevski\", 672)\n\n# print() ile \u00e7\u0131kt\u0131 alma\nprint(kitap1)\nprint(str(kitap2))\n  <\/code><\/pre>\n<p>Yukar\u0131daki kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda alaca\u011f\u0131n\u0131z \u00e7\u0131kt\u0131 a\u015fa\u011f\u0131daki gibi olacakt\u0131r:<\/p>\n<pre><code>\nSefiller (Victor Hugo)\nSu\u00e7 ve Ceza (Fyodor Dostoyevski)\n  <\/code><\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, art\u0131k nesnelerimiz bellek adresleri yerine anlaml\u0131 bilgilerle temsil ediliyor. Bu, \u00f6zellikle bir listede veya ba\u015fka bir veri yap\u0131s\u0131nda bir\u00e7ok <code class=\"language-\">Kitap<\/code> nesnesi oldu\u011funda ve bunlar\u0131 h\u0131zl\u0131ca g\u00f6zden ge\u00e7irmek istedi\u011finizde \u00e7ok i\u015fe yarar. Son kullan\u0131c\u0131ya g\u00f6sterilecek raporlarda, log mesajlar\u0131nda veya hata bildirimlerinde bu t\u00fcr kullan\u0131c\u0131 dostu \u00e7\u0131kt\u0131lar, uygulaman\u0131z\u0131n anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu sayede, kodunuzu kullanan di\u011fer ki\u015filer veya uygulaman\u0131z\u0131n son kullan\u0131c\u0131lar\u0131, nesnelerin neyi temsil etti\u011fini an\u0131nda kavrayabilirler. Unutmay\u0131n, <code class=\"language-\">__str__()<\/code>&#8216;\u0131n amac\u0131 okunabilirlik ve \u00f6zet bilgidir.<\/p>\n<h2><code class=\"language-\">__repr__()<\/code> Metodunu Nas\u0131l Uygular\u0131z? Geli\u015ftirici \u0130\u00e7in Netlik<\/h2>\n<p>\u015eimdi de <code class=\"language-\">__repr__()<\/code> metodunu <code class=\"language-\">Kitap<\/code> s\u0131n\u0131f\u0131m\u0131za ekleyelim. Bu metot, geli\u015ftiricilere y\u00f6nelik oldu\u011fu i\u00e7in, nesnenin t\u00fcm \u00f6nemli \u00f6zelliklerini i\u00e7ermeli ve m\u00fcmk\u00fcnse nesneyi tekrar olu\u015fturmak i\u00e7in kullan\u0131labilecek bir formatta olmal\u0131d\u0131r. \u0130\u015fte bir \u00f6rnek:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, sayfa_sayisi):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.sayfa_sayisi = sayfa_sayisi\n\n    def __repr__(self):\n        \"\"\"\n        Geli\u015ftirici dostu, kesin string temsilini d\u00f6nd\u00fcr\u00fcr.\n        repr() fonksiyonu veya interaktif konsolda \u00e7a\u011fr\u0131l\u0131r.\n        \"\"\"\n        return f\"Kitap(baslik='{self.baslik}', yazar='{self.yazar}', sayfa_sayisi={self.sayfa_sayisi})\"\n\n# Nesne olu\u015fturma\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1488)\n\n# repr() ile \u00e7\u0131kt\u0131 alma\nprint(repr(kitap1))\n\n# \u0130nteraktif konsolda do\u011frudan nesneyi yazma\n# >>> kitap1\n  <\/code><\/pre>\n<p>Bu kodun \u00e7\u0131kt\u0131s\u0131 \u015fu \u015fekilde olacakt\u0131r:<\/p>\n<pre><code>\nKitap(baslik='Sefiller', yazar='Victor Hugo', sayfa_sayisi=1488)\n  <\/code><\/pre>\n<p>E\u011fer bu kodu interaktif bir Python konsolunda \u00e7al\u0131\u015ft\u0131r\u0131p sadece <code class=\"language-\">kitap1<\/code> yaz\u0131p Enter tu\u015funa basarsan\u0131z, yine ayn\u0131 \u00e7\u0131kt\u0131y\u0131 g\u00f6receksiniz. Bu \u00e7\u0131kt\u0131, nesnenin s\u0131n\u0131f ad\u0131n\u0131 ve t\u00fcm kurucu arg\u00fcmanlar\u0131n\u0131 i\u00e7erdi\u011fi i\u00e7in, nesnenin durumunu a\u00e7\u0131k\u00e7a g\u00f6sterir. Hata ay\u0131klama s\u0131ras\u0131nda, bir nesnenin anl\u0131k durumunu h\u0131zla g\u00f6rmek istedi\u011finizde veya log dosyalar\u0131na nesne bilgilerini kaydederken <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 paha bi\u00e7ilmezdir. Bu temsil sayesinde, bir problemle kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131zda, nesnenin hangi de\u011ferlere sahip oldu\u011funu an\u0131nda anlayabilir ve sorunun kayna\u011f\u0131n\u0131 daha h\u0131zl\u0131 tespit edebilirsiniz. G\u00fc\u00e7l\u00fc bir <code class=\"language-\">__repr__()<\/code> uygulamas\u0131, \u00f6zellikle karma\u015f\u0131k sistemlerde geli\u015ftirme s\u00fcrecini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve hatalar\u0131n izini s\u00fcrmeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<h2><code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> Aras\u0131ndaki Temel Farklar Nelerdir?<\/h2>\n<p>Bu iki metot aras\u0131ndaki fark\u0131 net bir \u015fekilde anlamak, Python&#8217;da nesne temsillerini do\u011fru kullanman\u0131n anahtar\u0131d\u0131r. Her ikisi de bir nesnenin string temsilini d\u00f6nd\u00fcrse de, hitap ettikleri kitle ve ama\u00e7lar\u0131 farkl\u0131d\u0131r. A\u015fa\u011f\u0131daki tablo, bu farklar\u0131 \u00f6zetlemektedir:<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th><code class=\"language-\">__str__()<\/code><\/th>\n<th><code class=\"language-\">__repr__()<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Hedef Kitle<\/strong><\/td>\n<td>Son kullan\u0131c\u0131lar ve okunabilirlik arayan geli\u015ftiriciler<\/td>\n<td>Geli\u015ftiriciler ve hata ay\u0131klama ara\u00e7lar\u0131<\/td>\n<\/tr>\n<tr>\n<td><strong>Ama\u00e7<\/strong><\/td>\n<td>Anla\u015f\u0131l\u0131r, k\u0131sa ve \u00f6z bir \u00e7\u0131kt\u0131 sa\u011flamak<\/td>\n<td>Nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilecek kesin, bilgilendirici bir \u00e7\u0131kt\u0131 sa\u011flamak<\/td>\n<\/tr>\n<tr>\n<td><strong>\u00c7a\u011fr\u0131lma \u015eekli<\/strong><\/td>\n<td><code class=\"language-\">print(obj)<\/code>, <code class=\"language-\">str(obj)<\/code>, <code class=\"language-\">format(obj)<\/code><\/td>\n<td><code class=\"language-\">repr(obj)<\/code>, interaktif konsolda do\u011frudan nesne ad\u0131 yaz\u0131ld\u0131\u011f\u0131nda<\/td>\n<\/tr>\n<tr>\n<td><strong>Varsay\u0131lan Davran\u0131\u015f<\/strong><\/td>\n<td>E\u011fer <code class=\"language-\">__str__()<\/code> tan\u0131ml\u0131 de\u011filse, <code class=\"language-\">__repr__()<\/code> \u00e7a\u011fr\u0131l\u0131r.<\/td>\n<td>Tan\u0131ml\u0131 de\u011filse, varsay\u0131lan Python \u00e7\u0131kt\u0131s\u0131 (<code class=\"language-\">&lt;__main__.MyClass object at 0x...&gt;<\/code>) kullan\u0131l\u0131r.<\/td>\n<\/tr>\n<tr>\n<td><strong>\u0130deal \u00c7\u0131kt\u0131<\/strong><\/td>\n<td><code class=\"language-\">\"Sefiller (Victor Hugo)\"<\/code><\/td>\n<td><code class=\"language-\">\"Kitap(baslik='Sefiller', yazar='Victor Hugo', sayfa_sayisi=1488)\"<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu farklar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak, ayn\u0131 <code class=\"language-\">Kitap<\/code> s\u0131n\u0131f\u0131nda hem <code class=\"language-\">__str__()<\/code> hem de <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 tan\u0131mlad\u0131\u011f\u0131m\u0131zda nas\u0131l bir \u00e7\u0131kt\u0131 alaca\u011f\u0131m\u0131za bakal\u0131m:<\/p>\n<pre><code>\nclass Kitap:\n    def __init__(self, baslik, yazar, sayfa_sayisi):\n        self.baslik = baslik\n        self.yazar = yazar\n        self.sayfa_sayisi = sayfa_sayisi\n\n    def __str__(self):\n        return f\"{self.baslik} ({self.yazar})\"\n\n    def __repr__(self):\n        return f\"Kitap(baslik='{self.baslik}', yazar='{self.yazar}', sayfa_sayisi={self.sayfa_sayisi})\"\n\nkitap1 = Kitap(\"Sefiller\", \"Victor Hugo\", 1488)\n\nprint(kitap1)         # __str__() \u00e7a\u011fr\u0131l\u0131r\nprint(str(kitap1))    # __str__() \u00e7a\u011fr\u0131l\u0131r\nprint(repr(kitap1))   # __repr__() \u00e7a\u011fr\u0131l\u0131r\n\n# \u0130nteraktif konsolda:\n# >>> kitap1          # __repr__() \u00e7a\u011fr\u0131l\u0131r\n  <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code>\nSefiller (Victor Hugo)\nSefiller (Victor Hugo)\nKitap(baslik='Sefiller', yazar='Victor Hugo', sayfa_sayisi=1488)\n  <\/code><\/pre>\n<p>Bu \u00f6rnek, her iki metodun da ayn\u0131 nesne \u00fczerinde nas\u0131l farkl\u0131 ama\u00e7lar i\u00e7in kullan\u0131labilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Birini tan\u0131mlad\u0131\u011f\u0131n\u0131zda di\u011ferinin otomatik olarak \u00e7a\u011fr\u0131lma durumu, esneklik sa\u011flarken, her ikisini de tan\u0131mlamak, kodunuzun farkl\u0131 ba\u011flamlarda en uygun string temsilini sunmas\u0131n\u0131 garanti eder. Bu ayr\u0131m\u0131 iyi anlamak, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde hata ay\u0131klama ve kodun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan kritik bir rol oynar.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131: Hangi Durumda Hangisini Tercih Etmeliyiz?<\/h2>\n<p>Teorik bilgilerin \u00f6tesinde, bu metotlar\u0131 ger\u00e7ek d\u00fcnya uygulamalar\u0131nda nerede ve nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131 bilmek \u00f6nemlidir. \u0130\u015fte birka\u00e7 vaka analizi:<\/p>\n<h3>Vaka Analizi 1: Loglama ve Hata Ay\u0131klama S\u00fcre\u00e7leri<\/h3>\n<p>Bir uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 s\u0131ras\u0131nda olu\u015fan olaylar\u0131 kaydetmek (loglama) veya bir hatan\u0131n nedenini bulmaya \u00e7al\u0131\u015fmak (hata ay\u0131klama), geli\u015ftiricilerin g\u00fcnl\u00fck i\u015flerinin \u00f6nemli bir par\u00e7as\u0131d\u0131r. Bu senaryolarda, nesnelerin tam ve kesin bir temsiline ihtiyac\u0131m\u0131z vard\u0131r ki, sorunun kayna\u011f\u0131n\u0131 net bir \u015fekilde anlayabilelim. \u0130\u015fte bu noktada <code class=\"language-\">__repr__()<\/code> metodu parlar.<\/p>\n<p>\u00d6rne\u011fin, bir e-ticaret uygulamas\u0131nda bir <code class=\"language-\">Siparis<\/code> nesnesi \u00fczerinde i\u015flem yaparken bir hata olu\u015ftu\u011funu d\u00fc\u015f\u00fcn\u00fcn. Log dosyas\u0131na sadece &#8220;Sipari\u015f i\u015flenirken hata olu\u015ftu&#8221; yazmak yeterli de\u011fildir. Hangi sipari\u015f, hangi \u00fcr\u00fcnler, hangi kullan\u0131c\u0131&#8230; Bu bilgileri i\u00e7eren bir log kayd\u0131 \u00e7ok daha faydal\u0131 olacakt\u0131r:<\/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):\n        self.siparis_id = siparis_id\n        self.musteri_id = musteri_id\n        self.urunler = urunler\n        self.toplam_fiyat = toplam_fiyat\n\n    def __repr__(self):\n        return f\"Siparis(id={self.siparis_id}, musteri_id={self.musteri_id}, urunler={self.urunler}, toplam_fiyat={self.toplam_fiyat})\"\n\n    def __str__(self):\n        return f\"Sipari\u015f #{self.siparis_id} - M\u00fc\u015fteri: {self.musteri_id} - Toplam: {self.toplam_fiyat:.2f} TL\"\n\ndef siparis_isleme(siparis):\n    try:\n        # Karma\u015f\u0131k sipari\u015f i\u015fleme mant\u0131\u011f\u0131\n        if siparis.toplam_fiyat < 0:\n            raise ValueError(\"Sipari\u015f toplam fiyat\u0131 negatif olamaz!\")\n        logging.info(f\"Sipari\u015f ba\u015far\u0131yla i\u015flendi: {siparis}\") # __str__ \u00e7a\u011fr\u0131l\u0131r\n    except ValueError as e:\n        logging.error(f\"Sipari\u015f i\u015flenirken hata olu\u015ftu: {repr(siparis)}. Hata: {e}\") # __repr__ \u00e7a\u011fr\u0131l\u0131r\n\nsiparis_gecerli = Siparis(101, 5001, [\"Laptop\", \"Mouse\"], 2500.00)\nsiparis_hatali = Siparis(102, 5002, [\"Klavye\"], -150.00)\n\nsiparis_isleme(siparis_gecerli)\nsiparis_isleme(siparis_hatali)\n  <\/code><\/pre>\n<p>Bu \u00f6rnekte, ba\u015far\u0131l\u0131 bir i\u015flemde kullan\u0131c\u0131 dostu <code class=\"language-\">__str__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullan\u0131rken, hata durumunda geli\u015ftiriciye t\u00fcm detaylar\u0131 sunan <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 logluyoruz. Bu sayede, log dosyalar\u0131na bakt\u0131\u011f\u0131m\u0131zda, hatal\u0131 sipari\u015fin t\u00fcm detaylar\u0131n\u0131 an\u0131nda g\u00f6rebilir ve sorunu \u00e7ok daha h\u0131zl\u0131 \u00e7\u00f6zebiliriz.<\/p>\n<h3>Vaka Analizi 2: Kullan\u0131c\u0131 Aray\u00fcz\u00fc (UI) \u00c7\u0131kt\u0131lar\u0131 ve Raporlama<\/h3>\n<p>Kullan\u0131c\u0131lar\u0131n do\u011frudan etkile\u015fimde bulundu\u011fu aray\u00fczlerde veya onlara sunulan raporlarda, karma\u015f\u0131k ve teknik detaylar i\u00e7eren \u00e7\u0131kt\u0131lardan ka\u00e7\u0131nmak gerekir. Bu gibi durumlarda, <code class=\"language-\">__str__()<\/code> metodu devreye girer. Kullan\u0131c\u0131lar, nesnenin teknik yap\u0131s\u0131ndan ziyade, onun anlam\u0131n\u0131 ve ana \u00f6zelliklerini g\u00f6rmek isterler.<\/p>\n<p>\u00d6rne\u011fin, bir k\u00fct\u00fcphane y\u00f6netim sisteminde kitap listesi g\u00f6sterirken:<\/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        return f\"Kitap(baslik='{self.baslik}', yazar='{self.yazar}', yayin_yili={self.yayin_yili})\"\n\nkitaplar = [\n    Kitap(\"1984\", \"George Orwell\", 1949),\n    Kitap(\"Cesur Yeni D\u00fcnya\", \"Aldous Huxley\", 1932),\n    Kitap(\"Fahrenheit 451\", \"Ray Bradbury\", 1953)\n]\n\nprint(\"K\u00fct\u00fcphanedeki Kitaplar:\")\nfor kitap in kitaplar:\n    print(f\"- {kitap}\") # __str__ otomatik \u00e7a\u011fr\u0131l\u0131r\n  <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code>\nK\u00fct\u00fcphanedeki Kitaplar:\n- '1984' (George Orwell, 1949)\n- 'Cesur Yeni D\u00fcnya' (Aldous Huxley, 1932)\n- 'Fahrenheit 451' (Ray Bradbury, 1953)\n  <\/code><\/pre>\n<p>Bu \u00e7\u0131kt\u0131, son kullan\u0131c\u0131 i\u00e7in son derece okunabilir ve bilgilendiricidir. Kullan\u0131c\u0131, kitab\u0131n t\u00fcm teknik detaylar\u0131n\u0131 bilmek zorunda kalmadan, arad\u0131\u011f\u0131 bilgiyi kolayca bulabilir. Benzer \u015fekilde, bir web sayfas\u0131nda \u00fcr\u00fcn kartlar\u0131, bir mobil uygulamada profil bilgileri veya bir e-posta bildirimindeki \u00f6zet bilgiler gibi durumlarda <code class=\"language-\">__str__()<\/code> kullan\u0131m\u0131, kullan\u0131c\u0131 deneyimini do\u011frudan iyile\u015ftirir.<\/p>\n<h3>Vaka Analizi 3: Veri Yap\u0131lar\u0131n\u0131n Temsili ve Hata Tespiti<\/h3>\n<p>Karma\u015f\u0131k veri yap\u0131lar\u0131 (\u00f6rne\u011fin, ba\u011fl\u0131 listeler, a\u011fa\u00e7lar, grafikler) ile \u00e7al\u0131\u015f\u0131rken, bu yap\u0131lar\u0131n elemanlar\u0131n\u0131n do\u011fru bir \u015fekilde temsil edilmesi hem geli\u015ftirme hem de hata ay\u0131klama a\u00e7\u0131s\u0131ndan hayati \u00f6neme sahiptir. Burada hem <code class=\"language-\">__str__()<\/code> hem de <code class=\"language-\">__repr__()<\/code> farkl\u0131 roller \u00fcstlenebilir.<\/p>\n<pre><code>\nclass Dugum:\n    def __init__(self, veri):\n        self.veri = veri\n        self.sonraki = None # Ba\u011fl\u0131 liste i\u00e7in\n\n    def __repr__(self):\n        # Geli\u015ftirici i\u00e7in: Dugumun tam durumu\n        return f\"Dugum(veri={repr(self.veri)}, sonraki={repr(self.sonraki)})\"\n\n    def __str__(self):\n        # Kullan\u0131c\u0131 i\u00e7in: Sadece Dugumun verisi\n        return f\"Veri: {self.veri}\"\n\n# Bir ba\u011fl\u0131 liste olu\u015ftural\u0131m\ndugum_a = Dugum(\"A\")\ndugum_b = Dugum(\"B\")\ndugum_c = Dugum(\"C\")\n\ndugum_a.sonraki = dugum_b\ndugum_b.sonraki = dugum_c\n\nprint(\"Kullan\u0131c\u0131 Dostu \u00c7\u0131kt\u0131:\")\ncurrent = dugum_a\nwhile current:\n    print(current) # __str__ \u00e7a\u011fr\u0131l\u0131r\n    current = current.sonraki\n\nprint(\"\\nGeli\u015ftirici Dostu \u00c7\u0131kt\u0131 (Hata Ay\u0131klama \u0130\u00e7in):\")\nprint(repr(dugum_a)) # __repr__ \u00e7a\u011fr\u0131l\u0131r\n  <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code>\nKullan\u0131c\u0131 Dostu \u00c7\u0131kt\u0131:\nVeri: A\nVeri: B\nVeri: C\n\nGeli\u015ftirici Dostu \u00c7\u0131kt\u0131 (Hata Ay\u0131klama \u0130\u00e7in):\nDugum(veri='A', sonraki=Dugum(veri='B', sonraki=Dugum(veri='C', sonraki=None)))\n  <\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">__str__()<\/code> ba\u011fl\u0131 listenin elemanlar\u0131n\u0131 basit\u00e7e listelerken, <code class=\"language-\">__repr__()<\/code> t\u00fcm yap\u0131y\u0131 (hangi d\u00fc\u011f\u00fcm\u00fcn kime i\u015faret etti\u011fi dahil) tek bir sat\u0131rda g\u00f6sterir. Bu, \u00f6zellikle karma\u015f\u0131k ba\u011flant\u0131lar veya hatal\u0131 referanslar oldu\u011funda, sorunu h\u0131zla tespit etmek i\u00e7in \u00e7ok de\u011ferli bir ara\u00e7t\u0131r. Her iki metodun da do\u011fru kullan\u0131lmas\u0131, veri yap\u0131lar\u0131n\u0131n hem anla\u015f\u0131l\u0131r hem de hata ay\u0131klanabilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>\u0130leri D\u00fczey Kullan\u0131m \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p><code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 temel d\u00fczeyde anlad\u0131k, ancak daha verimli ve g\u00fc\u00e7l\u00fc kullan\u0131mlar i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar bulunmaktad\u0131r:<\/p>\n<h3>1. <code class=\"language-\">eval(repr(obj))<\/code> Prensibi<\/h3>\n<p>\u0130deal bir <code class=\"language-\">__repr__()<\/code> uygulamas\u0131nda, \u00e7\u0131kt\u0131n\u0131n nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilecek ge\u00e7erli bir Python ifadesi olmas\u0131 beklenir. Yani, <code class=\"language-\">eval(repr(obj))<\/code> ifadesinin orijinal <code class=\"language-\">obj<\/code>'ye e\u015fde\u011fer bir nesne d\u00f6nd\u00fcrmesi hedeflenir. Bu, \u00f6zellikle nesneleri dinamik olarak olu\u015fturman\u0131z veya kaydetmeniz gereken durumlarda \u00e7ok faydal\u0131d\u0131r. Ancak, bu her zaman m\u00fcmk\u00fcn veya pratik olmayabilir, \u00f6zellikle karma\u015f\u0131k nesneler veya d\u0131\u015f kaynaklara ba\u011f\u0131ml\u0131 nesneler i\u00e7in. Yine de bu prensibi akl\u0131n\u0131zda tutmak, <code class=\"language-\">__repr__()<\/code> metodunuzu daha g\u00fc\u00e7l\u00fc k\u0131lar.<\/p>\n<pre><code>\nclass Nokta:\n    def __init__(self, x, y):\n        self.x = x\n        self.y = y\n\n    def __repr__(self):\n        return f\"Nokta(x={self.x}, y={self.y})\"\n\np1 = Nokta(10, 20)\np1_repr = repr(p1) # \"Nokta(x=10, y=20)\"\np2 = eval(p1_repr)  # p2 art\u0131k Nokta(x=10, y=20) nesnesidir\n\nprint(p1)\nprint(p2)\nprint(p1.x == p2.x and p1.y == p2.y)\n  <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code>\nNokta(x=10, y=20)\nNokta(x=10, y=20)\nTrue\n  <\/code><\/pre>\n<h3>2. <code class=\"language-\">dataclasses<\/code> Mod\u00fcl\u00fc ile Otomatik <code class=\"language-\">__repr__<\/code><\/h3>\n<p>Python 3.7 ve sonras\u0131 s\u00fcr\u00fcmlerde tan\u0131t\u0131lan <code class=\"language-\">dataclasses<\/code> mod\u00fcl\u00fc, veri tutan s\u0131n\u0131flar i\u00e7in boilerplate kodu azaltman\u0131n harika bir yoludur. Bu mod\u00fcl, <code class=\"language-\">__init__<\/code>, <code class=\"language-\">__repr__<\/code>, <code class=\"language-\">__eq__<\/code> gibi \u00f6zel metotlar\u0131 otomatik olarak olu\u015fturabilir. Bu, \u00f6zellikle veri s\u0131n\u0131flar\u0131n\u0131zda <code class=\"language-\">__repr__()<\/code>'\u0131 manuel olarak yazma zahmetinden kurtar\u0131r.<\/p>\n<pre><code>\nfrom dataclasses import dataclass\n\n@dataclass\nclass Urun:\n    ad: str\n    fiyat: float\n    stok_miktari: int = 0 # Varsay\u0131lan de\u011fer\n\nurun1 = Urun(\"Laptop\", 1200.50, 50)\nprint(repr(urun1)) # Otomatik olarak olu\u015fturulan __repr__ \u00e7a\u011fr\u0131l\u0131r\n  <\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code>\nUrun(ad='Laptop', fiyat=1200.5, stok_miktari=50)\n  <\/code><\/pre>\n<p>Bu, kodunuzu daha k\u0131sa, daha temiz ve daha az hataya a\u00e7\u0131k hale getirir.<\/p>\n<h3>3. Performans Etkileri ve Karma\u015f\u0131k Nesneler<\/h3>\n<p><code class=\"language-\">__str__()<\/code> veya <code class=\"language-\">__repr__()<\/code> metotlar\u0131 i\u00e7inde \u00e7ok karma\u015f\u0131k veya zaman al\u0131c\u0131 i\u015flemler yapmaktan ka\u00e7\u0131n\u0131n. Bu metotlar s\u0131k\u00e7a \u00e7a\u011fr\u0131labilece\u011fi i\u00e7in (\u00f6zellikle loglama ve hata ay\u0131klama s\u0131ras\u0131nda), performans darbo\u011fazlar\u0131na neden olabilirler. E\u011fer nesnenizin string temsilini olu\u015fturmak pahal\u0131 bir i\u015flemse, bunu cache'lemeyi d\u00fc\u015f\u00fcnebilir veya sadece gerekti\u011finde hesaplamay\u0131 yapabilirsiniz.<\/p>\n<div class=\"tip-box\">\n    Uzman \u0130pucu: Karma\u015f\u0131k nesneler i\u00e7in <code class=\"language-\">__repr__<\/code> \u00e7\u0131kt\u0131s\u0131nda d\u00f6ng\u00fcsel referanslar\u0131 y\u00f6netmek \u00f6nemlidir. Aksi takdirde sonsuz d\u00f6ng\u00fcye girip <code class=\"language-\">RecursionError<\/code> alabilirsiniz. Bunu \u00f6nlemek i\u00e7in, <code class=\"language-\">self.baska_nesne<\/code> gibi referanslar\u0131 do\u011frudan de\u011fil, \u00f6rne\u011fin <code class=\"language-\">self.baska_nesne.id<\/code> gibi basit bir temsilini kullanabilirsiniz.\n  <\/div>\n<h3>4. Tutarl\u0131l\u0131k ve Her \u0130kisini de Tan\u0131mlama<\/h3>\n<p>Genel bir en iyi uygulama olarak, bir s\u0131n\u0131f tan\u0131mlad\u0131\u011f\u0131n\u0131zda hem <code class=\"language-\">__str__()<\/code> hem de <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 tan\u0131mlaman\u0131z \u00f6nerilir. Bu, kodunuzun farkl\u0131 ba\u011flamlarda (kullan\u0131c\u0131 aray\u00fcz\u00fc, loglama, hata ay\u0131klama) en uygun string temsilini sunmas\u0131n\u0131 sa\u011flar. E\u011fer birini tan\u0131mlayacak vaktiniz varsa, \u00f6nceli\u011fi genellikle <code class=\"language-\">__repr__()<\/code>'a vermelisiniz, \u00e7\u00fcnk\u00fc <code class=\"language-\">__str__()<\/code> tan\u0131ml\u0131 olmad\u0131\u011f\u0131nda Python varsay\u0131lan olarak <code class=\"language-\">__repr__()<\/code>'\u0131 kullanacakt\u0131r.<\/p>\n<div class=\"tip-box\">\n    Uzman \u0130pucu: Her zaman hem <code class=\"language-\">__str__()<\/code> hem de <code class=\"language-\">__repr__()<\/code> tan\u0131mlayarak kodunuzun esnekli\u011fini art\u0131r\u0131n. E\u011fer zaman k\u0131s\u0131tl\u0131ysa, <code class=\"language-\">__repr__()<\/code>'\u0131 tan\u0131mlamak daha iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r \u00e7\u00fcnk\u00fc <code class=\"language-\">print()<\/code> varsay\u0131lan olarak onu kullanabilir.\n  <\/div>\n<h3>Mobil Uyumlu \u00c7\u0131kt\u0131lar \u0130\u00e7in Dikkat Edilmesi Gerekenler<\/h3>\n<p>Makalenin ba\u015f\u0131nda bahsetti\u011fimiz mobil uyumluluk konusu, do\u011frudan <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131n \u00e7\u0131kt\u0131s\u0131yla ilgili olmasa da, bu \u00e7\u0131kt\u0131lar\u0131n bir web veya mobil aray\u00fczde nas\u0131l g\u00f6r\u00fcnt\u00fclendi\u011fiyle dolayl\u0131 olarak ili\u015fkilidir. \u00d6zellikle <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 gibi uzun ve detayl\u0131 stringler, k\u00fc\u00e7\u00fck ekranlarda okunmas\u0131 zor olabilir. Bu nedenle, bu stringleri bir kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6sterirken responsive tasar\u0131m prensiplerini uygulamak \u00f6nemlidir. \u00d6rne\u011fin, CSS <code class=\"language-\">media query<\/code>'leri kullanarak ekran boyutuna g\u00f6re metin boyutunu k\u00fc\u00e7\u00fcltebilir veya uzun stringleri kayd\u0131r\u0131labilir alanlara yerle\u015ftirebilirsiniz. A\u015fa\u011f\u0131daki basit CSS \u00f6rne\u011fi, bu t\u00fcr bir yakla\u015f\u0131ma i\u015faret eder:<\/p>\n<pre><code class=\"language-css\">\n&lt;style&gt;\n  .output-container {\n    white-space: pre-wrap; \/* Uzun metinleri sarar *\/\n    word-wrap: break-word; \/* Kelimeleri b\u00f6ler *\/\n    overflow-x: auto; \/* Yatay kayd\u0131rma \u00e7ubu\u011fu ekler *\/\n    padding: 10px;\n    border: 1px solid #ccc;\n    background-color: #f9f9f9;\n  }\n\n  @media (max-width: 600px) {\n    .output-container {\n      font-size: 0.9em; \/* K\u00fc\u00e7\u00fck ekranlarda font boyutunu k\u00fc\u00e7\u00fclt *\/\n      max-height: 200px; \/* Belirli bir y\u00fckseklik s\u0131n\u0131r\u0131 *\/\n    }\n  }\n&lt;\/style&gt;\n\n&lt;div class=\"output-container\"&gt;\n  &lt;p&gt;Bu alan, <code class=\"language-\">__repr__<\/code> \u00e7\u0131kt\u0131s\u0131 gibi uzun bir metni i\u00e7erebilir. Mobil cihazlarda daha okunakl\u0131 olmas\u0131 i\u00e7in stiller uygulanm\u0131\u015ft\u0131r.&lt;\/p&gt;\n  &lt;pre&gt;&lt;code&gt;Kitap(baslik='\u00c7ok Uzun Bir Ba\u015fl\u0131k Buraya Gelebilir ve K\u00fc\u00e7\u00fck Ekranda S\u0131k\u0131nt\u0131 Yaratabilir', yazar='Yazar Ad\u0131', sayfa_sayisi=9999)&lt;\/code&gt;&lt;\/pre&gt;\n&lt;\/div&gt;\n  <\/code><\/pre>\n<p>Bu, Python nesne temsillerinizin, farkl\u0131 cihazlarda da kullan\u0131c\u0131 dostu kalmas\u0131n\u0131 sa\u011flamak i\u00e7in tasar\u0131m taraf\u0131nda alabilece\u011finiz bir \u00f6nlemdir.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Python'daki <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131, nesnelerinizin string temsillerini \u00f6zelle\u015ftirerek kodunuzun okunabilirli\u011fini, hata ay\u0131klama yetene\u011fini ve genel kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran g\u00fc\u00e7l\u00fc ara\u00e7lard\u0131r. <code class=\"language-\">__str__()<\/code>, kullan\u0131c\u0131 dostu ve \u00f6zet bir \u00e7\u0131kt\u0131 sa\u011flarken, <code class=\"language-\">__repr__()<\/code> geli\u015ftirici dostu, kesin ve nesneyi yeniden olu\u015fturmaya y\u00f6nelik bir temsil sunar. Her iki metodu da do\u011fru ba\u011flamda kullanmak, hem sizin hem de ekibinizin geli\u015ftirme s\u00fcrecini daha verimli hale getirir.<\/p>\n<p>Unutmay\u0131n, iyi yaz\u0131lm\u0131\u015f <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131, sadece birer string d\u00f6nd\u00fcrmekten \u00e7ok daha fazlas\u0131d\u0131r; bunlar, kodunuzun \"konu\u015fmas\u0131n\u0131\" ve kendisini daha iyi ifade etmesini sa\u011flayan ileti\u015fim k\u00f6pr\u00fcleridir. Bu metotlar\u0131 uygulayarak, Python projelerinizde daha temiz, daha anla\u015f\u0131l\u0131r ve daha s\u00fcrd\u00fcr\u00fclebilir bir kod taban\u0131 olu\u015fturma yolunda \u00f6nemli bir ad\u0131m atm\u0131\u015f olacaks\u0131n\u0131z.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h4><code class=\"language-\">__str__()<\/code> tan\u0131mlamazsam ne olur?<\/h4>\n<p>E\u011fer bir s\u0131n\u0131fta <code class=\"language-\">__str__()<\/code> metodu tan\u0131mlanmam\u0131\u015fsa, Python varsay\u0131lan olarak <code class=\"language-\">__repr__()<\/code> metodunu \u00e7a\u011f\u0131r\u0131r (e\u011fer tan\u0131ml\u0131ysa). E\u011fer <code class=\"language-\">__repr__()<\/code> da tan\u0131ml\u0131 de\u011filse, nesnenin varsay\u0131lan bellek adresini i\u00e7eren \u00e7\u0131kt\u0131y\u0131 (<code class=\"language-\">&lt;__main__.MyClass object at 0x...&gt;<\/code>) g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/p>\n<\/li>\n<li>\n<h4><code class=\"language-\">__repr__()<\/code> tan\u0131mlamazsam ne olur?<\/h4>\n<p>E\u011fer bir s\u0131n\u0131fta <code class=\"language-\">__repr__()<\/code> metodu tan\u0131mlanmam\u0131\u015fsa, Python nesnenin varsay\u0131lan bellek adresini i\u00e7eren \u00e7\u0131kt\u0131y\u0131 (<code class=\"language-\">&lt;__main__.MyClass object at 0x...&gt;<\/code>) kullan\u0131r. Bu, \u00f6zellikle interaktif konsolda veya hata ay\u0131klama s\u0131ras\u0131nda nesnenin i\u00e7eri\u011fi hakk\u0131nda hi\u00e7bir bilgi alamayaca\u011f\u0131n\u0131z anlam\u0131na gelir.<\/p>\n<\/li>\n<li>\n<h4>Her zaman hem <code class=\"language-\">__str__()<\/code> hem de <code class=\"language-\">__repr__()<\/code> tan\u0131mlamak zorunda m\u0131y\u0131m?<\/h4>\n<p>Zorunda de\u011filsiniz, ancak genellikle iyi bir uygulamad\u0131r. Her ikisini de tan\u0131mlamak, nesnenizin farkl\u0131 ba\u011flamlarda (kullan\u0131c\u0131ya y\u00f6nelik \u00e7\u0131kt\u0131lar ve geli\u015ftiriciye y\u00f6nelik hata ay\u0131klama\/loglama) en uygun string temsilini sunmas\u0131n\u0131 sa\u011flar. E\u011fer sadece birini tan\u0131mlayacaksan\u0131z, genellikle <code class=\"language-\">__repr__()<\/code>'\u0131 tan\u0131mlamak daha faydal\u0131d\u0131r, \u00e7\u00fcnk\u00fc <code class=\"language-\">__str__()<\/code> tan\u0131ml\u0131 olmad\u0131\u011f\u0131nda <code class=\"language-\">print()<\/code> onu kullanabilir.<\/p>\n<\/li>\n<li>\n<h4><code class=\"language-\">str()<\/code> ve <code class=\"language-\">repr()<\/code> fonksiyonlar\u0131 ile <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131 aras\u0131ndaki fark nedir?<\/h4>\n<p><code class=\"language-\">str()<\/code> ve <code class=\"language-\">repr()<\/code> Python'\u0131n yerle\u015fik fonksiyonlar\u0131d\u0131r ve bir nesnenin string temsilini almak i\u00e7in kullan\u0131l\u0131rlar. Bu fonksiyonlar, arka planda s\u0131ras\u0131yla nesnenin <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> \u00f6zel metotlar\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r. Yani, <code class=\"language-\">str(obj)<\/code> asl\u0131nda <code class=\"language-\">obj.__str__()<\/code>'\u0131, <code class=\"language-\">repr(obj)<\/code> ise <code class=\"language-\">obj.__repr__()<\/code>'\u0131 \u00e7a\u011f\u0131r\u0131r. Fonksiyonlar, bu \u00f6zel metotlar\u0131n \u00e7a\u011fr\u0131lma aray\u00fcz\u00fcd\u00fcr.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"__str__() ve __repr__() Metotlar\u0131: Python&#8217;da Nesneleri Anla\u015f\u0131l\u0131r K\u0131lma Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin.&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-31321","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>Python Nesneleri Neden &quot;Konu\u015fmal\u0131&quot;? `__str__()` ve `__repr__()` Nedir?<\/title>\n<meta name=\"description\" content=\"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.\" \/>\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\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Nesneleri Neden &quot;Konu\u015fmal\u0131&quot;? `__str__()` ve `__repr__()` Nedir?\" \/>\n<meta property=\"og:description\" content=\"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T13:25:25+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=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? `__str__()` ve `__repr__()` Nedir?\",\"datePublished\":\"2025-10-08T13:25:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\"},\"wordCount\":2648,\"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\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\",\"name\":\"Python Nesneleri Neden \\\"Konu\u015fmal\u0131\\\"? `__str__()` ve `__repr__()` Nedir?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T13:25:25+00:00\",\"description\":\"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? `__str__()` ve `__repr__()` Nedir?\"}]},{\"@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":"Python Nesneleri Neden \"Konu\u015fmal\u0131\"? `__str__()` ve `__repr__()` Nedir?","description":"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.","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\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/","og_locale":"tr_TR","og_type":"article","og_title":"Python Nesneleri Neden \"Konu\u015fmal\u0131\"? `__str__()` ve `__repr__()` Nedir?","og_description":"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T13:25:25+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? `__str__()` ve `__repr__()` Nedir?","datePublished":"2025-10-08T13:25:25+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/"},"wordCount":2648,"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\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/","url":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/","name":"Python Nesneleri Neden \"Konu\u015fmal\u0131\"? `__str__()` ve `__repr__()` Nedir?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T13:25:25+00:00","description":"Python nesnelerinizi ekrana bast\u0131\u011f\u0131n\u0131zda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz anla\u015f\u0131lmaz \u00e7\u0131kt\u0131lar\u0131 anlaml\u0131 hale getirin. __str__() ve __repr__() metotlar\u0131yla nesnelerinizi \u00f6zelle\u015ftirerek kodunuzu daha okunabilir ve hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n. Ad\u0131m ad\u0131m rehberiniz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesneleri-neden-konusmali-__str__-ve-__repr__-nedir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Nesneleri Neden &#8220;Konu\u015fmal\u0131&#8221;? `__str__()` ve `__repr__()` Nedir?"}]},{"@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\/31321","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=31321"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31321\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}