{"id":31336,"date":"2025-10-08T20:25:54","date_gmt":"2025-10-08T17:25:54","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/"},"modified":"2025-10-08T20:25:54","modified_gmt":"2025-10-08T17:25:54","slug":"python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/","title":{"rendered":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?"},"content":{"rendered":"<p><title>Python&#8217;da __str__() ve __repr__() Metotlar\u0131 Nas\u0131l Kullan\u0131l\u0131r?<\/title><br \/>\n<body><\/p>\n<p>Python&#8217;da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h2>Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?<\/h2>\n<p>Python&#8217;da her \u015fey bir nesnedir. Bir say\u0131, bir metin, bir liste veya kendi tan\u0131mlad\u0131\u011f\u0131n\u0131z \u00f6zel bir s\u0131n\u0131f\u0131n \u00f6rne\u011fi olsun, hepsi bellekte belirli bir adrese sahip nesnelerdir. Peki, bu nesneleri ekrana yazd\u0131rmak istedi\u011fimizde ne olur? Varsay\u0131lan olarak, Python bize genellikle nesnenin t\u00fcr\u00fcn\u00fc ve bellekteki adresini g\u00f6steren genel bir \u00e7\u0131kt\u0131 verir. \u00d6rne\u011fin, <code class=\"language-\">print()<\/code> fonksiyonunu kullanarak veya bir interaktif kabukta nesnenin ad\u0131n\u0131 yazarak bir nesneyi g\u00f6r\u00fcnt\u00fclemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda, genellikle <code class=\"language-\">&lt;__main__.MyClass object at 0x...&gt;<\/code> gibi bir \u00e7\u0131kt\u0131 al\u0131rs\u0131n\u0131z. Bu \u00e7\u0131kt\u0131, geli\u015ftiriciler i\u00e7in bile \u00e7o\u011fu zaman pek anlaml\u0131 de\u011fildir, hele ki son kullan\u0131c\u0131lar i\u00e7in hi\u00e7 de\u011fildir.<\/p>\n<p>\u0130\u015fte tam da bu noktada, nesnelerimizin daha anlaml\u0131 ve okunabilir metinsel temsillerini olu\u015fturma ihtiyac\u0131 ortaya \u00e7\u0131kar. Bir <code class=\"language-\">Kullanici<\/code> s\u0131n\u0131f\u0131n\u0131z varsa ve bu s\u0131n\u0131f\u0131n bir \u00f6rne\u011fini yazd\u0131rd\u0131\u011f\u0131n\u0131zda sadece bellek adresini g\u00f6rmek yerine, kullan\u0131c\u0131n\u0131n ad\u0131n\u0131, soyad\u0131n\u0131 ve e-posta adresini g\u00f6rmek istemez misiniz? Bu, hem hata ay\u0131klama s\u00fcre\u00e7lerinde size b\u00fcy\u00fck kolayl\u0131k sa\u011flar hem de uygulaman\u0131z\u0131n \u00e7\u0131kt\u0131lar\u0131n\u0131 daha anla\u015f\u0131l\u0131r hale getirir. \u00d6rne\u011fin, bir hata g\u00fcnl\u00fc\u011f\u00fcne (logging) bir nesneyi kaydederken, o nesnenin neyi temsil etti\u011fini a\u00e7\u0131k\u00e7a belirten bir metinsel ifade g\u00f6rmek, sorunun kayna\u011f\u0131n\u0131 bulman\u0131za yard\u0131mc\u0131 olur. Bu nedenle, Python&#8217;da nesnelerin metinsel temsillerini \u00f6zelle\u015ftirmek, iyi bir programlama prati\u011finin \u00f6nemli bir par\u00e7as\u0131d\u0131r.<\/p>\n<p>Bu \u00f6zelle\u015ftirme, Python&#8217;\u0131n \u00f6zel metotlar\u0131 veya &#8220;dunder&#8221; (double underscore) metotlar\u0131 arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Bu metotlar, belirli Python i\u015flemlerine yan\u0131t vermek i\u00e7in s\u0131n\u0131flar\u0131n\u0131za ekleyebilece\u011finiz \u00f6nceden tan\u0131mlanm\u0131\u015f fonksiyonlard\u0131r. Nesnelerin metinsel temsili i\u00e7in en s\u0131k kullan\u0131lan iki dunder metot <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code>&#8216;dir. Her ikisi de nesnenizin bir metin dizisine d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesini sa\u011flar, ancak farkl\u0131 ama\u00e7lara hizmet ederler ve farkl\u0131 ba\u011flamlarda kullan\u0131l\u0131rlar. \u015eimdi bu iki \u00f6nemli metodun detaylar\u0131na inelim ve aralar\u0131ndaki temel farklar\u0131 anlamaya \u00e7al\u0131\u015fal\u0131m.<\/p>\n<pre><code>\nclass OrnekNesne:\n    def __init__(self, id_no, ad):\n        self.id_no = id_no\n        self.ad = ad\n\nnesne = OrnekNesne(1, \"Test Nesnesi\")\nprint(nesne)\n# \u00c7\u0131kt\u0131: &lt;__main__.OrnekNesne object at 0x...&gt; (varsay\u0131lan davran\u0131\u015f)\n    <\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte g\u00f6rebilece\u011finiz gibi, <code class=\"language-\">OrnekNesne<\/code> s\u0131n\u0131f\u0131n\u0131n bir \u00f6rne\u011fini do\u011frudan yazd\u0131rmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131zda, Python varsay\u0131lan olarak nesnenin bellek adresini g\u00f6sterir. Bu, nesnenin i\u00e7eri\u011fi hakk\u0131nda bize hi\u00e7bir bilgi vermez. Bu durumu a\u015fmak ve daha anlaml\u0131 \u00e7\u0131kt\u0131lar elde etmek i\u00e7in <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 kullanaca\u011f\u0131z.<\/p>\n<h2>__str__() ve __repr__() Nedir? Temel Farklar\u0131 Nelerdir?<\/h2>\n<p>Python&#8217;da nesnelerin metinsel temsillerini \u00f6zelle\u015ftirmek i\u00e7in kullan\u0131lan <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131, s\u0131k\u00e7a kar\u0131\u015ft\u0131r\u0131lan ancak farkl\u0131 ama\u00e7lara hizmet eden iki \u00f6nemli &#8220;dunder&#8221; metodudur. Bu metotlar, bir nesnenin string&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi gerekti\u011finde Python taraf\u0131ndan otomatik olarak \u00e7a\u011fr\u0131l\u0131r. Temel farklar\u0131n\u0131 anlamak, hangi durumda hangisini kullanman\u0131z gerekti\u011fine karar vermenizde kritik rol oynar.<\/p>\n<h3>__str__() Metodunun Kullan\u0131m Ama\u00e7lar\u0131 ve \u00d6rnekleri<\/h3>\n<p><code class=\"language-\">__str__()<\/code> metodu, bir nesnenin &#8220;kullan\u0131c\u0131 dostu&#8221; veya &#8220;insan taraf\u0131ndan okunabilir&#8221; temsilini d\u00f6nd\u00fcrmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu metot genellikle <code class=\"language-\">print()<\/code> fonksiyonu, <code class=\"language-\">str()<\/code> yerle\u015fik fonksiyonu veya <code class=\"language-\">format()<\/code> metodu gibi ba\u011flamlarda \u00e7a\u011fr\u0131l\u0131r. Amac\u0131, nesnenin i\u00e7eri\u011fini son kullan\u0131c\u0131ya veya bir log dosyas\u0131na anla\u015f\u0131l\u0131r ve \u00f6zl\u00fc bir \u015fekilde sunmakt\u0131r. Genellikle, bu temsil, nesneyi yeniden olu\u015fturmak i\u00e7in yeterli bilgi i\u00e7ermez; sadece o anki durumunu \u00f6zetler.<\/p>\n<p>Bir <code class=\"language-\">__str__()<\/code> uygulamas\u0131nda, nesnenin en \u00f6nemli \u00f6zelliklerini vurgulamaya odaklanmal\u0131s\u0131n\u0131z. \u00d6rne\u011fin, bir <code class=\"language-\">Personel<\/code> nesnesi i\u00e7in sadece ad\u0131n\u0131 ve pozisyonunu g\u00f6stermek yeterli olabilir. Metodun bir string d\u00f6nd\u00fcrmesi zorunludur. E\u011fer <code class=\"language-\">__str__()<\/code> metodu bir s\u0131n\u0131fta tan\u0131mlanmam\u0131\u015fsa, Python <code class=\"language-\">__repr__()<\/code> metodunu arar. E\u011fer <code class=\"language-\">__repr__()<\/code> de tan\u0131ml\u0131 de\u011filse, varsay\u0131lan nesne temsilini (<code class=\"language-\">&lt;__main__.MyObject object at 0x...&gt;<\/code>) kullan\u0131r.<\/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.yayin_yili}) yazan: {self.yazar}\"\n\nkitap1 = Kitap(\"Sava\u015f ve Bar\u0131\u015f\", \"Lev Tolstoy\", 1869)\nprint(kitap1)\n# \u00c7\u0131kt\u0131: 'Sava\u015f ve Bar\u0131\u015f' (1869) yazan: Lev Tolstoy\nprint(str(kitap1))\n# \u00c7\u0131kt\u0131: 'Sava\u015f ve Bar\u0131\u015f' (1869) yazan: Lev Tolstoy\n    <\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code class=\"language-\">Kitap<\/code> nesnesini <code class=\"language-\">print()<\/code> ile yazd\u0131rd\u0131\u011f\u0131m\u0131zda, <code class=\"language-\">__str__()<\/code> metodu devreye girer ve tan\u0131mlad\u0131\u011f\u0131m\u0131z okunabilir formatta bir \u00e7\u0131kt\u0131 verir. Bu, son kullan\u0131c\u0131lar i\u00e7in \u00e7ok daha bilgilendiricidir ve uygulaman\u0131z\u0131n daha profesyonel g\u00f6r\u00fcnmesini sa\u011flar.<\/p>\n<h3>__repr__() Metodunun Kullan\u0131m Ama\u00e7lar\u0131 ve \u00d6rnekleri<\/h3>\n<p><code class=\"language-\">__repr__()<\/code> metodu ise &#8220;geli\u015ftirici dostu&#8221; bir temsil d\u00f6nd\u00fcrmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Genellikle bir nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilecek kesin bir string d\u00f6nd\u00fcrmesi beklenir. Yani, <code class=\"language-\">eval(repr(nesne))<\/code> ifadesi, <code class=\"language-\">nesne<\/code> ile ayn\u0131 de\u011fere sahip yeni bir nesne d\u00f6nd\u00fcrmelidir (pratikte bu her zaman m\u00fcmk\u00fcn olmasa da, bu bir iyi uygulama prensibidir). <code class=\"language-\">__repr__()<\/code> metodu, interaktif Python kabu\u011funda bir nesnenin ad\u0131n\u0131 yazd\u0131\u011f\u0131n\u0131zda veya bir liste\/s\u00f6zl\u00fck gibi koleksiyonlar\u0131n i\u00e7inde nesneler g\u00f6r\u00fcnt\u00fclendi\u011finde otomatik olarak \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<p>Bu metodun temel amac\u0131, nesnenin i\u00e7eri\u011fi hakk\u0131nda a\u00e7\u0131k ve \u015f\u00fcpheye yer b\u0131rakmayacak \u015fekilde bilgi vermektir. Hata ay\u0131klama (debugging) s\u00fcre\u00e7lerinde \u00e7ok de\u011ferlidir \u00e7\u00fcnk\u00fc bir nesnenin tam olarak hangi verileri i\u00e7erdi\u011fini h\u0131zl\u0131ca g\u00f6rmenizi sa\u011flar. <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 genellikle nesnenin s\u0131n\u0131f ad\u0131n\u0131 ve t\u00fcm \u00f6nemli \u00f6zniteliklerini parantez i\u00e7inde i\u00e7erir. E\u011fer bir s\u0131n\u0131fta sadece <code class=\"language-\">__repr__()<\/code> tan\u0131ml\u0131ysa ve <code class=\"language-\">__str__()<\/code> tan\u0131ml\u0131 de\u011filse, <code class=\"language-\">print()<\/code> fonksiyonu da <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullan\u0131r.<\/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\nnokta1 = Nokta(10, 20)\nprint(nokta1)\n# __str__ tan\u0131ml\u0131 olmad\u0131\u011f\u0131 i\u00e7in __repr__ kullan\u0131l\u0131r.\n# \u00c7\u0131kt\u0131: Nokta(x=10, y=20)\nprint(repr(nokta1))\n# \u00c7\u0131kt\u0131: Nokta(x=10, y=20)\n\nliste_noktalar = [Nokta(1, 2), Nokta(3, 4)]\nprint(liste_noktalar)\n# \u00c7\u0131kt\u0131: [Nokta(x=1, y=2), Nokta(x=3, y=4)] (liste i\u00e7indeki nesneler i\u00e7in __repr__ \u00e7a\u011fr\u0131l\u0131r)\n    <\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">Nokta<\/code> s\u0131n\u0131f\u0131 i\u00e7in sadece <code class=\"language-\">__repr__()<\/code> tan\u0131mlad\u0131k. <code class=\"language-\">print(nokta1)<\/code> \u00e7a\u011fr\u0131s\u0131, <code class=\"language-\">__str__()<\/code> tan\u0131ml\u0131 olmad\u0131\u011f\u0131 i\u00e7in <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullan\u0131r. Ayr\u0131ca, bir listenin i\u00e7inde <code class=\"language-\">Nokta<\/code> nesnelerini g\u00f6r\u00fcnt\u00fcledi\u011fimizde de <code class=\"language-\">__repr__()<\/code> metodunun devreye girdi\u011fini g\u00f6r\u00fcyoruz. Bu, geli\u015ftiricilerin bir nesnenin durumunu h\u0131zl\u0131ca anlamas\u0131na olanak tan\u0131r.<\/p>\n<div class=\"interactive-element\">\n        Uzman \u0130pucu: Her zaman <code class=\"language-\">__repr__()<\/code> metodunu tan\u0131mlaman\u0131z \u015fiddetle tavsiye edilir. E\u011fer <code class=\"language-\">__str__()<\/code> tan\u0131mlamazsan\u0131z, Python otomatik olarak <code class=\"language-\">__repr__()<\/code> metodunu <code class=\"language-\">__str__()<\/code> yerine kullanacakt\u0131r. Ancak, <code class=\"language-\">__str__()<\/code> tan\u0131mlarsan\u0131z, <code class=\"language-\">print()<\/code> gibi kullan\u0131c\u0131 odakl\u0131 \u00e7\u0131kt\u0131lar i\u00e7in bu metot tercih edilir. Bu, geli\u015ftirici ve kullan\u0131c\u0131 deneyimini optimize etmenin anahtar\u0131d\u0131r.\n    <\/div>\n<p>A\u015fa\u011f\u0131daki tablo, <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> aras\u0131ndaki temel farklar\u0131 \u00f6zetlemektedir:<\/p>\n<table>\n<thead>\n<tr>\n<th>\u00d6zellik<\/th>\n<th><code>__str__()<\/code><\/th>\n<th><code>__repr__()<\/code><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Ama\u00e7<\/strong><\/td>\n<td>Kullan\u0131c\u0131 dostu, okunabilir temsil.<\/td>\n<td>Geli\u015ftirici dostu, kesin temsil.<\/td>\n<\/tr>\n<tr>\n<td><strong>Hedef Kitle<\/strong><\/td>\n<td>Son kullan\u0131c\u0131lar, log dosyalar\u0131.<\/td>\n<td>Geli\u015ftiriciler, hata ay\u0131klama ara\u00e7lar\u0131.<\/td>\n<\/tr>\n<tr>\n<td><strong>\u00c7a\u011fr\u0131ld\u0131\u011f\u0131 Yerler<\/strong><\/td>\n<td><code>print()<\/code>, <code>str()<\/code>, <code>format()<\/code>.<\/td>\n<td>\u0130nteraktif kabuk, <code>repr()<\/code>, koleksiyon i\u00e7inde.<\/td>\n<\/tr>\n<tr>\n<td><strong>Yeniden Olu\u015fturma<\/strong><\/td>\n<td>Genellikle nesneyi yeniden olu\u015fturmak i\u00e7in yeterli de\u011fil.<\/td>\n<td>M\u00fcmk\u00fcnse, nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilir olmal\u0131 (<code>eval(repr(obj))<\/code>).<\/td>\n<\/tr>\n<tr>\n<td><strong>Varsay\u0131lan Davran\u0131\u015f<\/strong><\/td>\n<td>Tan\u0131ml\u0131 de\u011filse <code>__repr__()<\/code>&#8216;\u0131 kullan\u0131r.<\/td>\n<td>Tan\u0131ml\u0131 de\u011filse varsay\u0131lan nesne temsilini verir.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda __str__() ve __repr__() Kullan\u0131m\u0131: Vaka Analizleri<\/h2>\n<p>Teorik bilgilerin \u00f6tesine ge\u00e7erek, <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131n ger\u00e7ek d\u00fcnya uygulamalar\u0131nda ne kadar faydal\u0131 oldu\u011funu g\u00f6rmek, konuyu daha iyi kavraman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Bu b\u00f6l\u00fcmde, iki farkl\u0131 senaryo \u00fczerinden bu metotlar\u0131n nas\u0131l kullan\u0131labilece\u011fini inceleyece\u011fiz: veritaban\u0131 kay\u0131tlar\u0131 ve API yan\u0131tlar\u0131.<\/p>\n<h3>Veritaban\u0131 Kay\u0131tlar\u0131 \u0130\u00e7in Anla\u015f\u0131l\u0131r Temsiller Olu\u015fturma<\/h3>\n<p>Bir web uygulamas\u0131 veya masa\u00fcst\u00fc uygulamas\u0131 geli\u015ftirirken, genellikle veritaban\u0131ndan \u00e7ekilen verileri Python nesnelerine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr\u00fcz. Bu nesneler, kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6sterilebilir, log dosyalar\u0131na yaz\u0131labilir veya di\u011fer mod\u00fcller aras\u0131nda aktar\u0131labilir. Bu t\u00fcr senaryolarda, nesnelerin anlaml\u0131 bir metinsel temsile sahip olmas\u0131, hem geli\u015ftirme hem de hata ay\u0131klama s\u00fcre\u00e7lerini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Hayal edin ki bir e-ticaret uygulaman\u0131z var ve <code class=\"language-\">Urun<\/code> ad\u0131nda bir s\u0131n\u0131f\u0131n\u0131z var. Bu s\u0131n\u0131f, veritaban\u0131ndaki bir \u00fcr\u00fcn kayd\u0131n\u0131 temsil ediyor. \u00dcr\u00fcn\u00fcn ad\u0131, fiyat\u0131 ve stok durumu gibi \u00f6zellikleri var. E\u011fer <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 do\u011fru \u015fekilde tan\u0131mlamazsan\u0131z, <code class=\"language-\">print(urun)<\/code> komutu size anlams\u0131z bir bellek adresi verecektir. Ancak bu metotlar\u0131 uygulad\u0131\u011f\u0131m\u0131zda durum de\u011fi\u015fir:<\/p>\n<pre><code>\nclass Urun:\n    def __init__(self, id, ad, fiyat, stok_adedi):\n        self.id = id\n        self.ad = ad\n        self.fiyat = fiyat\n        self.stok_adedi = stok_adedi\n\n    def __str__(self):\n        # Kullan\u0131c\u0131 dostu \u00e7\u0131kt\u0131: \u00dcr\u00fcn\u00fcn ad\u0131n\u0131 ve fiyat\u0131n\u0131 g\u00f6sterir\n        return f\"{self.ad} - {self.fiyat:.2f} TL\"\n\n    def __repr__(self):\n        # Geli\u015ftirici dostu \u00e7\u0131kt\u0131: Nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilir bir string\n        return f\"Urun(id={self.id}, ad='{self.ad}', fiyat={self.fiyat}, stok_adedi={self.stok_adedi})\"\n\n# \u00d6rnek kullan\u0131m\nurun1 = Urun(id=101, ad=\"Ak\u0131ll\u0131 Telefon\", fiyat=7500.00, stok_adedi=50)\nurun2 = Urun(id=102, ad=\"Kablosuz Kulakl\u0131k\", fiyat=1200.50, stok_adedi=120)\n\n# Kullan\u0131c\u0131 aray\u00fcz\u00fcnde veya loglarda g\u00f6sterilecek \u00e7\u0131kt\u0131\nprint(f\"M\u00fc\u015fteriye g\u00f6sterilecek \u00fcr\u00fcn: {urun1}\")\n# \u00c7\u0131kt\u0131: M\u00fc\u015fteriye g\u00f6sterilecek \u00fcr\u00fcn: Ak\u0131ll\u0131 Telefon - 7500.00 TL\n\n# Geli\u015ftirici konsolunda veya hata ay\u0131klama s\u0131ras\u0131nda\nprint(f\"Geli\u015ftirici bilgisi: {repr(urun2)}\")\n# \u00c7\u0131kt\u0131: Geli\u015ftirici bilgisi: Urun(id=102, ad='Kablosuz Kulakl\u0131k', fiyat=1200.5, stok_adedi=120)\n\n# Bir liste i\u00e7inde nesneleri g\u00f6r\u00fcnt\u00fcleme\nurun_listesi = [urun1, urun2]\nprint(urun_listesi)\n# \u00c7\u0131kt\u0131: [Urun(id=101, ad='Ak\u0131ll\u0131 Telefon', fiyat=7500.0, stok_adedi=50), Urun(id=102, ad='Kablosuz Kulakl\u0131k', fiyat=1200.5, stok_adedi=120)]\n    <\/code><\/pre>\n<p>Bu <code class=\"language-\">Urun<\/code> s\u0131n\u0131f\u0131 \u00f6rne\u011finde, <code class=\"language-\">__str__()<\/code> metodunu kullanarak kullan\u0131c\u0131lar\u0131n veya raporlar\u0131n okumas\u0131 kolay bir format olu\u015fturduk. Sadece \u00fcr\u00fcn ad\u0131 ve fiyat\u0131 gibi temel bilgileri g\u00f6steriyoruz. <code class=\"language-\">__repr__()<\/code> metodunda ise, nesnenin t\u00fcm \u00f6nemli \u00f6zniteliklerini i\u00e7eren, nesneyi potansiyel olarak yeniden olu\u015fturabilecek bir string d\u00f6nd\u00fcr\u00fcyoruz. Bu, hata ay\u0131klama s\u0131ras\u0131nda bir <code class=\"language-\">Urun<\/code> nesnesinin tam olarak hangi verilere sahip oldu\u011funu h\u0131zl\u0131ca anlamak i\u00e7in son derece kullan\u0131\u015fl\u0131d\u0131r. \u00d6zellikle bir koleksiyon (liste, s\u00f6zl\u00fck) i\u00e7inde birden fazla <code class=\"language-\">Urun<\/code> nesnesi varken, <code class=\"language-\">print(urun_listesi)<\/code> \u00e7\u0131kt\u0131s\u0131 sayesinde her bir \u00fcr\u00fcn\u00fcn detaylar\u0131n\u0131 an\u0131nda g\u00f6rebiliriz.<\/p>\n<h3>Hata Ay\u0131klama ve Geli\u015ftirici Deneyimi \u0130\u00e7in G\u00fc\u00e7l\u00fc __repr__() Kullan\u0131m\u0131<\/h3>\n<p>Geli\u015ftiricilerin g\u00fcnl\u00fck i\u015flerinde kar\u015f\u0131la\u015ft\u0131klar\u0131 en b\u00fcy\u00fck zorluklardan biri, karma\u015f\u0131k sistemlerdeki hatalar\u0131 ay\u0131klamakt\u0131r. <code class=\"language-\">__repr__()<\/code> metodu, bu s\u00fcre\u00e7te adeta bir s\u00fcper g\u00fc\u00e7 gibidir. Bir hata olu\u015ftu\u011funda veya program beklenmedik bir davran\u0131\u015f sergiledi\u011finde, ilgili nesnelerin durumunu h\u0131zl\u0131ca incelemek hayati \u00f6nem ta\u015f\u0131r. <code class=\"language-\">__repr__()<\/code>&#8216;\u0131n amac\u0131 tam da budur: nesnenin durumunu a\u00e7\u0131k\u00e7a ve kesin bir \u015fekilde ifade etmek.<\/p>\n<p>Bir API&#8217;den gelen JSON verilerini i\u015fleyen bir sistemde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z\u0131 varsayal\u0131m. Gelen veriyi bir <code class=\"language-\">KullaniciProfili<\/code> nesnesine d\u00f6n\u00fc\u015ft\u00fcr\u00fcyorsunuz. E\u011fer bu nesnelerde bir problem varsa (\u00f6rne\u011fin, bir alan eksik veya yanl\u0131\u015f formatta), <code class=\"language-\">__repr__()<\/code> size neyin yanl\u0131\u015f gitti\u011fini g\u00f6steren ilk ipucunu verecektir.<\/p>\n<pre><code>\nclass KullaniciProfili:\n    def __init__(self, kullanici_id, ad, soyad, eposta, rol=\"standart\"):\n        self.kullanici_id = kullanici_id\n        self.ad = ad\n        self.soyad = soyad\n        self.eposta = eposta\n        self.rol = rol\n\n    def __repr__(self):\n        # Geli\u015ftirici dostu, t\u00fcm \u00f6nemli detaylar\u0131 i\u00e7eren temsil\n        return (f\"KullaniciProfili(kullanici_id={self.kullanici_id}, \"\n                f\"ad='{self.ad}', soyad='{self.soyad}', \"\n                f\"eposta='{self.eposta}', rol='{self.rol}')\")\n\n    def __str__(self):\n        # Kullan\u0131c\u0131 dostu, temel bilgileri i\u00e7eren temsil\n        return f\"{self.ad} {self.soyad} ({self.eposta})\"\n\n# \u00d6rnekler\nprofil1 = KullaniciProfili(1, \"Ay\u015fe\", \"Y\u0131lmaz\", \"ayse.yilmaz@example.com\")\nprofil2 = KullaniciProfili(2, \"Mehmet\", \"Demir\", \"mehmet.demir@example.com\", rol=\"admin\")\n\n# Hata ay\u0131klama konsolunda\nprint(repr(profil1))\n# \u00c7\u0131kt\u0131: KullaniciProfili(kullanici_id=1, ad='Ay\u015fe', soyad='Y\u0131lmaz', eposta='ayse.yilmaz@example.com', rol='standart')\n\n# Bir hata durumunda loglama\nimport logging\nlogging.basicConfig(level=logging.DEBUG)\nlogging.debug(f\"Kullan\u0131c\u0131 profili olu\u015fturuldu: {profil2}\")\n# \u00c7\u0131kt\u0131 (\u00f6rnek): DEBUG:root:Kullan\u0131c\u0131 profili olu\u015fturuldu: KullaniciProfili(kullanici_id=2, ad='Mehmet', soyad='Demir', eposta='mehmet.demir@example.com', rol='admin')\n\n# print() ile kullan\u0131c\u0131 dostu \u00e7\u0131kt\u0131\nprint(profil1)\n# \u00c7\u0131kt\u0131: Ay\u015fe Y\u0131lmaz (ayse.yilmaz@example.com)\n    <\/code><\/pre>\n<p>Bu <code class=\"language-\">KullaniciProfili<\/code> \u00f6rne\u011fi, <code class=\"language-\">__repr__()<\/code>&#8216;\u0131n hata ay\u0131klama ve geli\u015ftirici deneyimi i\u00e7in ne kadar de\u011ferli oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6steriyor. <code class=\"language-\">logging.debug()<\/code> gibi fonksiyonlar, nesneleri loglad\u0131\u011f\u0131nda genellikle <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullan\u0131r. Bu sayede, uygulaman\u0131z\u0131n loglar\u0131n\u0131 incelerken, her bir <code class=\"language-\">KullaniciProfili<\/code> nesnesinin t\u00fcm \u00f6nemli \u00f6zelliklerini an\u0131nda g\u00f6rebilir ve olas\u0131 sorunlar\u0131 daha h\u0131zl\u0131 te\u015fhis edebilirsiniz. <code class=\"language-\">__str__()<\/code> ise kullan\u0131c\u0131ya veya daha genel raporlara y\u00f6nelik sadele\u015ftirilmi\u015f bir g\u00f6r\u00fcn\u00fcm sunmaya devam eder.<\/p>\n<p>\u00d6zetle, <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 s\u0131n\u0131flar\u0131n\u0131za dahil etmek, Python kodunuzun okunabilirli\u011fini, hata ay\u0131klanabilirli\u011fini ve genel olarak geli\u015ftirici verimlili\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu iki metodu do\u011fru ba\u011flamlarda kullanarak, hem son kullan\u0131c\u0131lar i\u00e7in daha iyi bir deneyim sunabilir hem de kendi geli\u015ftirme s\u00fcrecinizi kolayla\u015ft\u0131rabilirsiniz.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar: Ne Zaman Hangisini Kullanmal\u0131?<\/h2>\n<p><code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131n temel farklar\u0131n\u0131 ve kullan\u0131m alanlar\u0131n\u0131 anlad\u0131k. \u015eimdi, daha karma\u015f\u0131k senaryolarda bu metotlar\u0131 nas\u0131l daha etkili kullanabilece\u011finize dair ileri d\u00fczey ipu\u00e7lar\u0131na ve en iyi uygulamalara odaklanal\u0131m. Hangi metodu ne zaman tercih etmeniz gerekti\u011fi, uygulaman\u0131z\u0131n mimarisine ve hedeflenen \u00e7\u0131kt\u0131ya g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir.<\/p>\n<h3>D\u00f6ng\u00fcsel Referanslar ve Performans \u00dczerindeki Etkiler<\/h3>\n<p>Karma\u015f\u0131k veri yap\u0131lar\u0131na sahip s\u0131n\u0131flar geli\u015ftirirken, nesneler aras\u0131nda d\u00f6ng\u00fcsel referanslar olu\u015fabilir. \u00d6rne\u011fin, bir <code class=\"language-\">Departman<\/code> nesnesinin bir <code class=\"language-\">Calisan<\/code> listesi tuttu\u011fu ve her <code class=\"language-\">Calisan<\/code> nesnesinin de ait oldu\u011fu <code class=\"language-\">Departman<\/code> nesnesine bir referans tuttu\u011fu bir senaryo d\u00fc\u015f\u00fcnelim. E\u011fer <code class=\"language-\">__str__()<\/code> veya <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131z bu d\u00f6ng\u00fcsel referanslar\u0131 d\u00fczg\u00fcn bir \u015fekilde ele almazsa, sonsuz bir d\u00f6ng\u00fcye girerek <code class=\"language-\">RecursionError<\/code> hatas\u0131na yol a\u00e7abilirler.<\/p>\n<pre><code>\nclass Calisan:\n    def __init__(self, ad, departman=None):\n        self.ad = ad\n        self.departman = departman # Departman nesnesine referans\n\n    def __repr__(self):\n        # D\u00f6ng\u00fcsel referans\u0131 k\u0131rmak i\u00e7in departman ad\u0131n\u0131 kullan\n        departman_adi = self.departman.ad if self.departman else \"Yok\"\n        return f\"Calisan(ad='{self.ad}', departman='{departman_adi}')\"\n\n    def __str__(self):\n        return f\"{self.ad} ({self.departman.ad if self.departman else 'Departmans\u0131z'})\"\n\nclass Departman:\n    def __init__(self, ad):\n        self.ad = ad\n        self.calisanlar = [] # Calisan nesnelerine referans\n\n    def ekle_calisan(self, calisan):\n        self.calisanlar.append(calisan)\n        calisan.departman = self # \u00c7al\u0131\u015fana departman referans\u0131n\u0131 atama\n\n    def __repr__(self):\n        # Calisan nesnelerini do\u011frudan yazd\u0131rmak yerine sadece say\u0131s\u0131n\u0131 belirt\n        # Aksi takdirde, Calisan.__repr__ tekrar Departman'\u0131 \u00e7a\u011f\u0131r\u0131r ve sonsuz d\u00f6ng\u00fc olu\u015fur.\n        return f\"Departman(ad='{self.ad}', calisan_sayisi={len(self.calisanlar)})\"\n\n    def __str__(self):\n        return f\"Departman: {self.ad} ({len(self.calisanlar)} \u00e7al\u0131\u015fan)\"\n\n# \u00d6rnek kullan\u0131m\nmuhasebe = Departman(\"Muhasebe\")\nali = Calisan(\"Ali\")\nayse = Calisan(\"Ay\u015fe\")\n\nmuhasebe.ekle_calisan(ali)\nmuhasebe.ekle_calisan(ayse)\n\nprint(muhasebe)\n# \u00c7\u0131kt\u0131: Departman: Muhasebe (2 \u00e7al\u0131\u015fan)\nprint(repr(muhasebe))\n# \u00c7\u0131kt\u0131: Departman(ad='Muhasebe', calisan_sayisi=2)\n\nprint(ali)\n# \u00c7\u0131kt\u0131: Ali (Muhasebe)\nprint(repr(ali))\n# \u00c7\u0131kt\u0131: Calisan(ad='Ali', departman='Muhasebe')\n    <\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code class=\"language-\">Calisan<\/code> ve <code class=\"language-\">Departman<\/code> s\u0131n\u0131flar\u0131 aras\u0131nda d\u00f6ng\u00fcsel bir referans bulunmaktad\u0131r. <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 tasarlarken, bu d\u00f6ng\u00fcy\u00fc k\u0131rman\u0131n yollar\u0131n\u0131 arad\u0131k. <code class=\"language-\">Calisan.__repr__()<\/code> i\u00e7inde <code class=\"language-\">self.departman<\/code> nesnesinin tamam\u0131n\u0131 yazd\u0131rmak yerine sadece <code class=\"language-\">self.departman.ad<\/code> \u00f6zelli\u011fini kulland\u0131k. Benzer \u015fekilde, <code class=\"language-\">Departman.__repr__()<\/code> i\u00e7inde <code class=\"language-\">self.calisanlar<\/code> listesindeki her bir <code class=\"language-\">Calisan<\/code> nesnesini do\u011frudan yazd\u0131rmak yerine sadece <code class=\"language-\">len(self.calisanlar)<\/code> ile \u00e7al\u0131\u015fan say\u0131s\u0131n\u0131 belirttik. Bu, hem sonsuz d\u00f6ng\u00fcy\u00fc engeller hem de \u00e7\u0131kt\u0131y\u0131 daha y\u00f6netilebilir hale getirir.<\/p>\n<p>Performans a\u00e7\u0131s\u0131ndan bak\u0131ld\u0131\u011f\u0131nda, <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131n karma\u015f\u0131k hesaplamalar veya b\u00fcy\u00fck veri setleri \u00fczerinde \u00e7al\u0131\u015fmaktan ka\u00e7\u0131nmas\u0131 \u00f6nemlidir. Bu metotlar s\u0131k\u00e7a \u00e7a\u011fr\u0131labilir (\u00f6rne\u011fin, bir liste yazd\u0131rmak gibi), bu nedenle h\u0131zl\u0131 ve verimli olmalar\u0131 gerekir. \u00c7ok fazla string birle\u015ftirme veya veritaban\u0131 sorgusu gibi pahal\u0131 i\u015flemlerden ka\u00e7\u0131n\u0131n. M\u00fcmk\u00fcnse, nesnenin zaten bellekte bulunan \u00f6zniteliklerini kullanarak basit ve h\u0131zl\u0131 stringler olu\u015fturun.<\/p>\n<div class=\"interactive-element\">\n        Uzman \u0130pucu: <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131zda, string formatlama i\u00e7in f-string&#8217;leri kullanmak hem okunabilirlik hem de performans a\u00e7\u0131s\u0131ndan iyi bir yakla\u015f\u0131md\u0131r. Ayr\u0131ca, <code class=\"language-\">pprint<\/code> mod\u00fcl\u00fcn\u00fc kullanarak karma\u015f\u0131k nesnelerin <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 daha g\u00fczel formatlarda g\u00f6r\u00fcnt\u00fcleyebilirsiniz, bu da hata ay\u0131klama i\u00e7in \u00e7ok faydal\u0131d\u0131r.\n    <\/div>\n<h3><code class=\"language-\">eval()<\/code> ile Yeniden Olu\u015fturulabilirlik ve G\u00fcvenlik<\/h3>\n<p><code class=\"language-\">__repr__()<\/code> metodunun &#8220;nesneyi yeniden olu\u015fturmak i\u00e7in kullan\u0131labilecek kesin bir string d\u00f6nd\u00fcrmesi beklenir&#8221; ilkesini daha \u00f6nce belirtmi\u015ftik. Yani, <code class=\"language-\">eval(repr(obj))<\/code> \u00e7a\u011fr\u0131s\u0131n\u0131n <code class=\"language-\">obj<\/code> ile ayn\u0131 de\u011fere sahip yeni bir nesne d\u00f6nd\u00fcrmesi idealdir. Bu \u00f6zellik, \u00f6zellikle programatik olarak nesneler olu\u015fturman\u0131z gerekti\u011finde veya nesneleri serile\u015ftirip daha sonra geri y\u00fcklemek istedi\u011finizde faydal\u0131 olabilir.<\/p>\n<pre><code>\nclass Koordinat:\n    def __init__(self, x, y):\n        self.x = x\n        self.y = y\n\n    def __repr__(self):\n        # Nesneyi yeniden olu\u015fturmak i\u00e7in do\u011frudan kullan\u0131labilecek format\n        return f\"Koordinat(x={self.x}, y={self.y})\"\n\n    def __str__(self):\n        return f\"({self.x}, {self.y})\"\n\nnokta_orijinal = Koordinat(10, 25)\nprint(f\"Orijinal: {nokta_orijinal}\")\n# \u00c7\u0131kt\u0131: Orijinal: (10, 25)\n\nrepr_cikti = repr(nokta_orijinal)\nprint(f\"repr \u00e7\u0131kt\u0131s\u0131: {repr_cikti}\")\n# \u00c7\u0131kt\u0131: repr \u00e7\u0131kt\u0131s\u0131: Koordinat(x=10, y=25)\n\n# eval() ile nesneyi yeniden olu\u015fturma\nnokta_yeni = eval(repr_cikti)\nprint(f\"Yeniden olu\u015fturulan: {nokta_yeni}\")\n# \u00c7\u0131kt\u0131: Yeniden olu\u015fturulan: (10, 25)\n\nprint(f\"Orijinal ve yeni nesneler ayn\u0131 de\u011fere sahip mi? {nokta_orijinal.x == nokta_yeni.x and nokta_orijinal.y == nokta_yeni.y}\")\n# \u00c7\u0131kt\u0131: Orijinal ve yeni nesneler ayn\u0131 de\u011fere sahip mi? True\n    <\/code><\/pre>\n<p>Bu \u00f6rnekte, <code class=\"language-\">Koordinat<\/code> s\u0131n\u0131f\u0131n\u0131n <code class=\"language-\">__repr__()<\/code> metodu, <code class=\"language-\">eval()<\/code> ile yeniden olu\u015fturulabilir bir string d\u00f6nd\u00fcr\u00fcyor. Bu, \u00f6zellikle test senaryolar\u0131nda, bir nesnenin belirli bir durumunu kaydetmek ve daha sonra ayn\u0131 durumu yeniden olu\u015fturmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<p>Ancak, <code class=\"language-\">eval()<\/code> fonksiyonunun g\u00fcvenlik riskleri ta\u015f\u0131d\u0131\u011f\u0131n\u0131 unutmamak \u00f6nemlidir. <code class=\"language-\">eval()<\/code> fonksiyonu, bir string&#8217;i Python kodu olarak \u00e7al\u0131\u015ft\u0131r\u0131r. E\u011fer <code class=\"language-\">repr()<\/code> \u00e7\u0131kt\u0131s\u0131 d\u0131\u015far\u0131dan gelen (g\u00fcvenilmeyen) bir veri taraf\u0131ndan manip\u00fcle edilirse, k\u00f6t\u00fc niyetli kodlar\u0131n \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na neden olabilir. Bu nedenle, <code class=\"language-\">eval()<\/code> fonksiyonunu sadece tamamen g\u00fcvendi\u011finiz kaynaklardan gelen string&#8217;lerle kullanmal\u0131s\u0131n\u0131z. Genel olarak, nesneleri serile\u015ftirmek ve deserialize etmek i\u00e7in <code class=\"language-\">pickle<\/code> veya <code class=\"language-\">json<\/code> gibi daha g\u00fcvenli mod\u00fcller tercih edilmelidir. <code class=\"language-\">__repr__()<\/code>&#8216;\u0131n <code class=\"language-\">eval()<\/code> ile yeniden olu\u015fturulabilir olmas\u0131, daha \u00e7ok geli\u015ftiriciye y\u00f6nelik bir &#8220;ideal&#8221; durumu ifade eder, pratik bir serile\u015ftirme y\u00f6ntemi olarak g\u00f6r\u00fclmemelidir.<\/p>\n<p>Sonu\u00e7 olarak, <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 etkin bir \u015fekilde kullanmak, sadece kodunuzu daha okunabilir hale getirmekle kalmaz, ayn\u0131 zamanda hata ay\u0131klama s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131r ve genel yaz\u0131l\u0131m kalitenizi art\u0131r\u0131r. Bu metotlar\u0131 s\u0131n\u0131flar\u0131n\u0131za dahil etmeyi bir al\u0131\u015fkanl\u0131k haline getirmek, her Python geli\u015ftiricisi i\u00e7in faydal\u0131 olacakt\u0131r.<\/p>\n<h2>Mobil Uyumlu \u00c7\u0131kt\u0131lar \u0130\u00e7in HTML ve CSS \u00d6nerileri (\u00d6rneklerle)<\/h2>\n<p>Modern uygulamalar\u0131n \u00e7o\u011fu, farkl\u0131 ekran boyutlar\u0131na sahip cihazlarda sorunsuz \u00e7al\u0131\u015fmal\u0131d\u0131r. Python&#8217;da <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131, nesnelerin metinsel temsillerini \u00fcretir. Bu metinsel temsiller genellikle konsolda veya log dosyalar\u0131nda kullan\u0131l\u0131r. Ancak, bu verileri bir web aray\u00fcz\u00fcnde (\u00f6rne\u011fin, bir raporlama sayfas\u0131nda veya bir y\u00f6netim panelinde) g\u00f6stermek istedi\u011finizde, mobil uyumluluk \u00f6nemli hale gelir. Do\u011frudan Python kodunuzun HTML \u00e7\u0131kt\u0131s\u0131n\u0131 de\u011fi\u015ftirmese de, bu \u00e7\u0131kt\u0131lar\u0131n web ortam\u0131nda nas\u0131l sunulabilece\u011fine dair HTML ve CSS ipu\u00e7lar\u0131 verebiliriz.<\/p>\n<p>Bir Python uygulamas\u0131n\u0131n \u00fcretti\u011fi nesne listesini (\u00f6rne\u011fin, <code class=\"language-\">Urun<\/code> veya <code class=\"language-\">KullaniciProfili<\/code> listesi) web sayfas\u0131nda g\u00f6stermek istedi\u011finizi varsayal\u0131m. Her bir nesnenin <code class=\"language-\">__str__()<\/code> veya <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullanarak dinamik HTML i\u00e7erik olu\u015fturabilirsiniz. Bu i\u00e7eri\u011fin mobil cihazlarda da iyi g\u00f6r\u00fcnmesi i\u00e7in CSS media query&#8217;lerini kullanmak en iyi yakla\u015f\u0131md\u0131r.<\/p>\n<p>A\u015fa\u011f\u0131da, Python&#8217;dan gelen verileri temsil eden bir <code class=\"language-\">div<\/code> yap\u0131s\u0131n\u0131n, farkl\u0131 ekran boyutlar\u0131nda nas\u0131l farkl\u0131 g\u00f6r\u00fcnebilece\u011fini g\u00f6steren bir HTML ve CSS \u00f6rne\u011fi bulunmaktad\u0131r. Bu, Python \u00e7\u0131kt\u0131lar\u0131n\u0131n web aray\u00fcz\u00fcne entegre edildi\u011finde nas\u0131l responsive hale getirilebilece\u011fine dair bir konsepttir.<\/p>\n<pre><code>\n&lt;style&gt;\n    \/* Genel stil *\/\n    .data-container {\n        font-family: Arial, sans-serif;\n        margin: 20px;\n        padding: 15px;\n        border: 1px solid #ccc;\n        border-radius: 8px;\n        background-color: #f9f9f9;\n    }\n\n    .item-card {\n        background-color: #fff;\n        border: 1px solid #eee;\n        border-radius: 5px;\n        padding: 10px;\n        margin-bottom: 10px;\n        box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }\n\n    .item-card h3 {\n        color: #333;\n        margin-top: 0;\n        font-size: 1.1em;\n    }\n\n    .item-card p {\n        color: #666;\n        font-size: 0.9em;\n        margin-bottom: 5px;\n    }\n\n    \/* Mobil cihazlar i\u00e7in (ekran geni\u015fli\u011fi 600px ve alt\u0131) *\/\n    @media (max-width: 600px) {\n        .data-container {\n            margin: 10px;\n            padding: 10px;\n        }\n        .item-card {\n            padding: 8px;\n            font-size: 0.9em;\n        }\n        .item-card h3 {\n            font-size: 1em;\n        }\n    }\n\n    \/* Tabletler i\u00e7in (ekran geni\u015fli\u011fi 601px ile 900px aras\u0131) *\/\n    @media (min-width: 601px) and (max-width: 900px) {\n        .data-container {\n            margin: 15px;\n            padding: 12px;\n        }\n        .item-card {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: space-between;\n        }\n        .item-card &gt; div {\n            flex: 1 1 48%; \/* \u0130ki s\u00fctunlu d\u00fczen *\/\n            margin-bottom: 5px;\n        }\n    }\n\n    \/* Masa\u00fcst\u00fc i\u00e7in (ekran geni\u015fli\u011fi 901px ve \u00fczeri) *\/\n    @media (min-width: 901px) {\n        .data-container {\n            max-width: 800px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n        .item-card {\n            display: grid;\n            grid-template-columns: 1fr 1fr 1fr; \/* \u00dc\u00e7 s\u00fctunlu d\u00fczen *\/\n            gap: 10px;\n            align-items: center;\n        }\n    }\n&lt;\/style&gt;\n\n&lt;div class=\"data-container\"&gt;\n    &lt;h3&gt;\u00dcr\u00fcn Listesi&lt;\/h3&gt;\n    &lt;div class=\"item-card\"&gt;\n        &lt;h4&gt;Ak\u0131ll\u0131 Telefon&lt;\/h4&gt;\n        &lt;p&gt;Fiyat: 7500.00 TL&lt;\/p&gt;\n        &lt;p&gt;Stok: 50 adet&lt;\/p&gt;\n        &lt;p&gt;&lt;code&gt;repr()<\/code>: Urun(id=101, ad='Ak\u0131ll\u0131 Telefon', fiyat=7500.0, stok_adedi=50)&lt;\/p&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"item-card\"&gt;\n        &lt;h4&gt;Kablosuz Kulakl\u0131k&lt;\/h4&gt;\n        &lt;p&gt;Fiyat: 1200.50 TL&lt;\/p&gt;\n        &lt;p&gt;Stok: 120 adet&lt;\/p&gt;\n        &lt;p&gt;&lt;code&gt;repr()<\/code>: Urun(id=102, ad='Kablosuz Kulakl\u0131k', fiyat=1200.5, stok_adedi=120)&lt;\/p&gt;\n    &lt;\/div&gt;\n    &lt;div class=\"item-card\"&gt;\n        &lt;h4&gt;Diz\u00fcst\u00fc Bilgisayar&lt;\/h4&gt;\n        &lt;p&gt;Fiyat: 15000.00 TL&lt;\/p&gt;\n        &lt;p&gt;Stok: 30 adet&lt;\/p&gt;\n        &lt;p&gt;&lt;code&gt;repr()<\/code>: Urun(id=103, ad='Diz\u00fcst\u00fc Bilgisayar', fiyat=15000.0, stok_adedi=30)&lt;\/p&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n    <\/code><\/pre>\n<p>Yukar\u0131daki HTML ve CSS \u00f6rne\u011fi, Python&#8217;da \u00fcretilen nesnelerin (burada <code class=\"language-\">Urun<\/code> nesneleri) web sayfas\u0131nda nas\u0131l sergilenebilece\u011fini g\u00f6stermektedir. CSS&#8217;deki <code class=\"language-\">@media<\/code> kurallar\u0131 sayesinde:<\/p>\n<ul>\n<li><strong><code class=\"language-\">max-width: 600px<\/code> (Mobil):<\/strong> Kartlar daha az bo\u015flukla ve biraz daha k\u00fc\u00e7\u00fck fontlarla g\u00f6r\u00fcnt\u00fclenir.<\/li>\n<li><strong><code class=\"language-\">min-width: 601px and max-width: 900px<\/code> (Tablet):<\/strong> Kartlar\u0131n i\u00e7eri\u011fi, flexbox kullan\u0131larak iki s\u00fctunlu bir d\u00fczende yan yana yerle\u015febilir.<\/li>\n<li><strong><code class=\"language-\">min-width: 901px<\/code> (Masa\u00fcst\u00fc):<\/strong> Kartlar\u0131n kendisi <code class=\"language-\">grid<\/code> kullan\u0131larak \u00fc\u00e7 s\u00fctunlu bir d\u00fczende yan yana s\u0131ralan\u0131r ve <code class=\"language-\">data-container<\/code> merkezi bir \u015fekilde sayfan\u0131n ortas\u0131nda yer al\u0131r.<\/li>\n<\/ul>\n<p>Bu yakla\u015f\u0131m, Python&#8217;da <code class=\"language-\">__str__()<\/code> veya <code class=\"language-\">__repr__()<\/code> ile olu\u015fturdu\u011funuz metinsel temsilleri, farkl\u0131 cihazlarda optimize edilmi\u015f bir kullan\u0131c\u0131 deneyimi sunacak \u015fekilde HTML ve CSS ile birle\u015ftirebilece\u011finizi g\u00f6stermektedir. Python sadece veriyi haz\u0131rlar, bu veriyi g\u00f6rsel olarak sunmak i\u00e7in HTML ve CSS gibi web teknolojilerine ihtiya\u00e7 duyars\u0131n\u0131z. Bu ba\u011flamda, <code class=\"language-\">__str__()<\/code> \u00e7\u0131kt\u0131s\u0131 genellikle son kullan\u0131c\u0131ya y\u00f6nelik &#8220;H4&#8221; veya &#8220;P&#8221; etiketleri i\u00e7inde, <code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 ise genellikle <code class=\"language-\"><\/p>\n<pre><code><\/code> veya <code class=\"language-\"><code><\/code> etiketleri i\u00e7inde, geli\u015ftiriciye y\u00f6nelik ek bilgi olarak sunulabilir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, Python'da nesnelerin metinsel temsillerini \u00f6zelle\u015ftirmek i\u00e7in kullan\u0131lan <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131n\u0131 derinlemesine inceledik. Bu iki metodun farkl\u0131 ama\u00e7lara hizmet etti\u011fini, <code class=\"language-\">__str__()<\/code>'\u0131n kullan\u0131c\u0131 dostu \u00e7\u0131kt\u0131lar i\u00e7in, <code class=\"language-\">__repr__()<\/code>'\u0131n ise geli\u015ftirici dostu ve nesneyi yeniden olu\u015fturmaya y\u00f6nelik kesin \u00e7\u0131kt\u0131lar i\u00e7in kullan\u0131ld\u0131\u011f\u0131n\u0131 \u00f6\u011frendik. Ger\u00e7ek d\u00fcnya senaryolar\u0131 ve vaka analizleri ile bu metotlar\u0131n pratik uygulamalar\u0131n\u0131 g\u00f6rd\u00fck, hata ay\u0131klama s\u00fcre\u00e7lerindeki \u00f6nemini ve d\u00f6ng\u00fcsel referanslar gibi ileri d\u00fczey konular\u0131 ele ald\u0131k. Son olarak, Python \u00e7\u0131kt\u0131lar\u0131n\u0131n web aray\u00fczlerinde mobil uyumlu bir \u015fekilde nas\u0131l sunulabilece\u011fine dair HTML ve CSS \u00f6rneklerine de\u011findik.<\/p>\n<p>Unutmay\u0131n, iyi yaz\u0131lm\u0131\u015f <code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> metotlar\u0131, kodunuzun okunabilirli\u011fini art\u0131r\u0131r, hata ay\u0131klama s\u00fcrecini h\u0131zland\u0131r\u0131r ve genel geli\u015ftirici deneyimini iyile\u015ftirir. Her zaman <code class=\"language-\">__repr__()<\/code> metodunu tan\u0131mlamaya \u00f6zen g\u00f6sterin ve m\u00fcmk\u00fcnse <code class=\"language-\">eval(repr(obj))<\/code> ile nesneyi yeniden olu\u015fturulabilir k\u0131lmaya \u00e7al\u0131\u015f\u0131n (g\u00fcvenlik endi\u015feleri g\u00f6z \u00f6n\u00fcnde bulundurularak). Kullan\u0131c\u0131ya y\u00f6nelik \u00e7\u0131kt\u0131lar i\u00e7in ise <code class=\"language-\">__str__()<\/code> metodunu kullanarak daha anla\u015f\u0131l\u0131r ve \u00f6zet bilgiler sunun.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n<h4><code class=\"language-\">__str__()<\/code> ve <code class=\"language-\">__repr__()<\/code> aras\u0131ndaki temel fark nedir?<\/h4>\n<p><code>__str__()<\/code>, nesnenin kullan\u0131c\u0131 dostu, okunabilir bir temsilini d\u00f6nd\u00fcrmeyi ama\u00e7lar ve genellikle <code>print()<\/code> fonksiyonu taraf\u0131ndan \u00e7a\u011fr\u0131l\u0131r. <code>__repr__()<\/code> ise geli\u015ftirici dostu, nesneyi yeniden olu\u015fturmak i\u00e7in yeterli bilgi i\u00e7eren kesin bir temsil d\u00f6nd\u00fcrmeyi ama\u00e7lar ve interaktif kabukta veya koleksiyonlar i\u00e7inde nesneler g\u00f6r\u00fcnt\u00fclendi\u011finde \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<\/li>\n<li>\n<h4>Hangi metodu her zaman tan\u0131mlamal\u0131y\u0131m?<\/h4>\n<p>Her zaman <code>__repr__()<\/code> metodunu tan\u0131mlaman\u0131z \u00f6nerilir. E\u011fer <code>__str__()<\/code> tan\u0131mlamazsan\u0131z, <code>print()<\/code> gibi fonksiyonlar otomatik olarak <code>__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131n\u0131 kullanacakt\u0131r. Bu, en az\u0131ndan geli\u015ftirici i\u00e7in anlaml\u0131 bir \u00e7\u0131kt\u0131 alman\u0131z\u0131 sa\u011flar.<\/p>\n<\/li>\n<li>\n<h4>D\u00f6ng\u00fcsel referanslarla nas\u0131l ba\u015fa \u00e7\u0131kar\u0131m?<\/h4>\n<p>D\u00f6ng\u00fcsel referanslar i\u00e7eren nesnelerde <code>__str__()<\/code> veya <code>__repr__()<\/code> metotlar\u0131 sonsuz d\u00f6ng\u00fcye girebilir. Bu durumu \u00f6nlemek i\u00e7in, d\u00f6ng\u00fcsel referans verilen nesnelerin t\u00fcm detaylar\u0131n\u0131 yazd\u0131rmak yerine, sadece temel bir \u00f6zelli\u011fini (\u00f6rne\u011fin, ad\u0131n\u0131 veya ID'sini) veya nesnenin varl\u0131\u011f\u0131n\u0131 belirten k\u0131sa bir ifadeyi (\u00f6rne\u011fin, \"X nesnesi i\u00e7eriyor\") kullanmal\u0131s\u0131n\u0131z.<\/p>\n<\/li>\n<li>\n<h4><code class=\"language-\">__repr__()<\/code> \u00e7\u0131kt\u0131s\u0131 neden <code class=\"language-\">eval()<\/code> ile yeniden olu\u015fturulabilir olmal\u0131?<\/h4>\n<p>Bu, <code>__repr__()<\/code> i\u00e7in bir iyi uygulama ilkesidir ve nesnenin durumunu a\u00e7\u0131k ve kesin bir \u015fekilde ifade etti\u011fini g\u00f6sterir. Hata ay\u0131klama veya test senaryolar\u0131nda bir nesnenin belirli bir durumunu kaydetmek ve daha sonra yeniden olu\u015fturmak i\u00e7in faydal\u0131 olabilir. Ancak, <code>eval()<\/code> fonksiyonunun g\u00fcvenlik riskleri nedeniyle dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<\/li>\n<li>\n<h4><code class=\"language-\">__str__()<\/code> veya <code class=\"language-\">__repr__()<\/code> tan\u0131mlamazsam ne olur?<\/h4>\n<p>E\u011fer her iki metodu da tan\u0131mlamazsan\u0131z, Python varsay\u0131lan olarak nesnenin t\u00fcr\u00fcn\u00fc ve bellekteki adresini g\u00f6steren genel bir \u00e7\u0131kt\u0131 verir (\u00f6rne\u011fin, <code>&lt;__main__.MyClass object at 0x...&gt;<\/code>). Bu, nesnenin i\u00e7eri\u011fi hakk\u0131nda hi\u00e7bir bilgi vermedi\u011fi i\u00e7in genellikle kullan\u0131\u015fl\u0131 de\u011fildir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python&#8217;da __str__() ve __repr__() Metotlar\u0131 Nas\u0131l Kullan\u0131l\u0131r? Python&#8217;da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve&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-31336","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 Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?<\/title>\n<meta name=\"description\" content=\"Python&#039;da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.\" \/>\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-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?\" \/>\n<meta property=\"og:description\" content=\"Python&#039;da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T17:25:54+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=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?\",\"datePublished\":\"2025-10-08T17:25:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\"},\"wordCount\":3329,\"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-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\",\"name\":\"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T17:25:54+00:00\",\"description\":\"Python'da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\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":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?","description":"Python'da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.","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-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/","og_locale":"tr_TR","og_type":"article","og_title":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?","og_description":"Python'da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T17:25:54+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?","datePublished":"2025-10-08T17:25:54+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/"},"wordCount":3329,"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-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/","url":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/","name":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\u0131z?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T17:25:54+00:00","description":"Python'da nesnelerinizin metinsel temsilini nas\u0131l \u00f6zelle\u015ftirece\u011finizi merak ediyor musunuz? __str__() ve __repr__() metotlar\u0131yla hata ay\u0131klamay\u0131 kolayla\u015ft\u0131r\u0131n ve kullan\u0131c\u0131 deneyimini iyile\u015ftirin. Bu makale, her iki metodun temel farklar\u0131n\u0131, kullan\u0131m ama\u00e7lar\u0131n\u0131 ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndaki uygulamalar\u0131n\u0131 ad\u0131m ad\u0131m a\u00e7\u0131klayacakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-nesnelerini-anlamak-neden-metinsel-temsile-ihtiyac-duyariz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python Nesnelerini Anlamak: Neden Metinsel Temsile \u0130htiya\u00e7 Duyar\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\/31336","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=31336"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31336\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31336"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31336"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31336"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}