<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Barış Yüksel</title>
	<atom:link href="http://www.brsyuksel.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.brsyuksel.com</link>
	<description>"Hiç uğraşamam..."</description>
	<lastBuildDate>Wed, 28 Jul 2010 12:00:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>VoizBox.com</title>
		<link>http://www.brsyuksel.com/voizbox-com.html</link>
		<comments>http://www.brsyuksel.com/voizbox-com.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 11:59:19 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[voizbox.com]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=129</guid>
		<description><![CDATA[Bu yazıda teknik bir paylaşım veya herhangi bir örnek kod yok. Size çok sevdiğim bir abim olan Murat Çileli&#8217;nin ilginizi çekeceğini düşündüğüm yeni projesi VoizBox.Com&#8216;dan bahsetmek istedim. Bu yazıda kendisinin tanıtımını ve ilerleyen zamanlarda voizbox.com&#8216;da nelerle karşılaşacağınızı bulacaksınız. VoizBox, sloganından da anlayacağınız üzere ses kayıdı yapıp bunları paylaşarak eğlenebileceğiniz bir proje. Sitede sağ üstte tarafta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.voizbox.com"><img class="alignleft size-full wp-image-133" title="VoizBox.com" src="http://www.brsyuksel.com/wp-content/uploads/logo3.png" alt="" width="265" height="86" /></a>Bu yazıda teknik bir paylaşım veya herhangi bir örnek kod yok. Size çok sevdiğim bir abim olan Murat Çileli&#8217;nin ilginizi çekeceğini düşündüğüm yeni projesi <a href="http://www.voizbox.com" target="_blank">VoizBox.Com</a>&#8216;dan bahsetmek istedim. Bu yazıda kendisinin tanıtımını ve ilerleyen zamanlarda <a href="http://voizbox.com" target="_blank">voizbox.com</a>&#8216;da nelerle karşılaşacağınızı bulacaksınız.</p>
<p><span id="more-129"></span></p>
<p>VoizBox, sloganından da anlayacağınız üzere ses kayıdı yapıp bunları paylaşarak eğlenebileceğiniz bir proje. Sitede sağ üstte tarafta rastlayacağınız &#8220;REC&#8221; butonuna tıkladıktan sonra bilgisayarınızın mikrofonu ile anonim bir kayıt yapabilir ve anında yayınlayıp kayıdın linkini paylaşabilirsiniz. İsterseniz kayıtlı kullanıcı olup bu dilediğiniz şekilde yönetebilirsiniz. Kullanımı gayet basit olan bu site ile gerçekten çok eğleneceğinizi düşünüyorum.</p>
<p>Gel gelelim VoizBox&#8217;ın kamera arkasına. VoizBox, şu anda gördüğünüz gibi<strong> Beta</strong> yayında olan bir proje. Düzenli olarak ofisine gidip var olan işlerinden ettiğim Murat abiyle projenin muhabbetini yaparken o kadar heyecanlandık ki kulislerde beta yayını bile hazır olmayan projenin 2.versiyonu için neler yapılabileceği konuşulmaya başlandı. VoizBox.com&#8217;un ilk etapta geliştirilmesinde ben katkıda bulunmasam da ikinci sürüm için bir çok fikir sundum. Murat abinin de proje üzerinde gerçekten hoş fikirleri var ve <a href="http://www.cevem.net">Cerem Beyazıt</a> ya da <a href="http://www.ociq.net">Oğuz Kaya</a>&#8216;nın yapacağı bir tasarım ile ( mesajı aldınız çocuklar )  yayınlanacak olan v2&#8242;de sizleri başka bir site karşılayacak.</p>
<p><em>v3&#8242;de ise Murat abiyi bir sandalyeye bağlayıp gözleri önünde projeyi Django&#8217;ya taşımayı düşünüyorum (H)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/voizbox-com.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yaratımsal Tasarım Desenleri</title>
		<link>http://www.brsyuksel.com/yaratimsal-tasarim-desenleri.html</link>
		<comments>http://www.brsyuksel.com/yaratimsal-tasarim-desenleri.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 11:24:11 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[abstract factory]]></category>
		<category><![CDATA[builder]]></category>
		<category><![CDATA[creational tasarım desenleri]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[factory method]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[tasarım desenleri]]></category>
		<category><![CDATA[yaratımsal tasarım desenleri]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=124</guid>
		<description><![CDATA[&#8220;Creational Design Patterns&#8221;. Şu sıralar uygulama geliştirirken sağladığı kolaylıklardan faydalanmak için vaktimi tasarım desenleri konusuna harcıyorum. Singleton, Factory Method, Abstract Factory, Prototype ve Builder adı altında 5 farklı yöntemin bulunduğu yaratımsal tasarım desenleri konusu için &#8220;çalışma notu&#8221; niteliğindeki örnek kodları paylaşmak istedim. Benim burda paylaşacağım örneklerde öyle karmaşık bir yapı bulmayacaksınız. Konuyu kolay anlamak için [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Creational Design Patterns&#8221;. Şu sıralar uygulama geliştirirken sağladığı kolaylıklardan faydalanmak için vaktimi tasarım desenleri konusuna harcıyorum. Singleton, Factory Method, Abstract Factory, Prototype ve Builder adı altında 5 farklı yöntemin bulunduğu yaratımsal tasarım desenleri konusu için &#8220;çalışma notu&#8221; niteliğindeki örnek kodları paylaşmak istedim.</p>
<p><span id="more-124"></span>Benim burda paylaşacağım örneklerde öyle karmaşık bir yapı bulmayacaksınız. Konuyu kolay anlamak için en basit örnekleri tercih ettim. Aşağıda yazdığım kodların bulunduğu tar.gz arşivi indirip örnekleri okuduktan sonra verdiğim kaynakları bir bir incelemenizi tavsiye ederim.</p>
<p><a href="http://brsyuksel.com/wp-content/uploads/YaratimsalTD.tar.gz" target="_blank">Yaratımsal Tasarım Desenleri ( tar.gz arşivi )</a></p>
<p>Kaynaklar:<br />
<a href="http://en.wikipedia.org/wiki/Creational_pattern">http://en.wikipedia.org/wiki/Creational_pattern</a><br />
<a href="http://www.csogr.sakarya.edu.tr/td/Default.aspx">http://www.csogr.sakarya.edu.tr/td/Default.aspx</a> ( Örnekler C# ve JAVA ile verilmiş ancak okumak pek de sıkıntı çıkarmayacaktır )<br />
<a href="http://code.internet.com.tr/design-patterns-tasarim-sablonlari/">http://code.internet.com.tr/design-patterns-tasarim-sablonlari/</a> ( PHP5 ile verilmiş örnekler mevcut )<br />
<a href="http://www.tasarimdesenleri.com/index.html">http://www.tasarimdesenleri.com/index.html</a> ( JAVA örnekler )<br />
Son olarak <a href="http://www.mindview.net/Books/TIPython/" target="_blank">Thinking in Python</a> kitabında Python ile yazılmış güzel örneklere rastlayacaksınız. Bu kitabı da okumanızı tavsiye ederim.</p>
<p><em>Burdan bakınca Matryoshka&#8217;da Builder ve Abstract Factory desenleri bana çok kolaylık sağlayacak gibi duruyor : )</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/yaratimsal-tasarim-desenleri.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singleton Tasarım Deseni</title>
		<link>http://www.brsyuksel.com/singleton-tasarim-deseni.html</link>
		<comments>http://www.brsyuksel.com/singleton-tasarim-deseni.html#comments</comments>
		<pubDate>Tue, 20 Jul 2010 21:56:58 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[singleton design pattern]]></category>
		<category><![CDATA[singleton metaclass]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=118</guid>
		<description><![CDATA[Yavaş yavaş tasarım desenleri üzerinde çalışmaya başlamışken Singleton tasarım deseni için yazdığım örnekleri paylaşmak istedim. Burda paylaşacağım örneklerde genel kullanım için uygun olanın varyasyonlarını yazmış olsam da aslen Singleton Tasarım Deseni prosedürüne tam olarak uymuyor. İlk olarak miras alarak kullanabileceğiniz, sadece amaca odaklanmış bir Singleton class Singleton&#40;object&#41;: &#160; &#160; _instance = None &#160; &#160; def [...]]]></description>
			<content:encoded><![CDATA[<p>Yavaş yavaş tasarım desenleri üzerinde çalışmaya başlamışken Singleton tasarım deseni için yazdığım örnekleri paylaşmak istedim. Burda paylaşacağım örneklerde genel kullanım için uygun olanın varyasyonlarını yazmış olsam da aslen Singleton Tasarım Deseni prosedürüne tam olarak uymuyor.<br />
<span id="more-118"></span></p>
<p>İlk olarak miras alarak kullanabileceğiniz, sadece amaca odaklanmış bir Singleton</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Singleton<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; _instance = <span class="kw2">None</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__new__</span><span class="br0">&#40;</span>cls,*args,**kwargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> cls._instance <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cls._instance = <span class="kw2">super</span><span class="br0">&#40;</span>Singleton,cls<span class="br0">&#41;</span>.<span class="kw4">__new__</span><span class="br0">&#40;</span>cls,*args,**kwargs<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> cls._instance</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Deneme<span class="br0">&#40;</span>Singleton<span class="br0">&#41;</span>: <span class="kw1">pass</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">x = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">y = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">x <span class="kw1">is</span> y <span class="co1">#True</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> x, y</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> <span class="kw2">id</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> , <span class="kw2">id</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>İkinci olarak gene miras alarak kullanabileceğiniz, ancak örneği &#8220;özel&#8221; ( private ) bir nitelikte taşıyarak prosedüre daha uygun bir Singleton</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Singleton2<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; __instance = <span class="kw2">None</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__new__</span><span class="br0">&#40;</span>cls,*args,**kwargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">getattr</span><span class="br0">&#40;</span>cls,<span class="st0">&quot;_%s__instance&quot;</span> % cls.__name__, <span class="kw2">None</span><span class="br0">&#41;</span> <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">setattr</span><span class="br0">&#40;</span>cls,<span class="st0">&quot;_%s__instance&quot;</span> % cls.__name__,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>Singleton2,cls<span class="br0">&#41;</span>.<span class="kw4">__new__</span><span class="br0">&#40;</span>cls,*args,**kwargs<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">getattr</span><span class="br0">&#40;</span>cls,<span class="st0">&quot;_%s__instance&quot;</span> % cls.__name__<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> Deneme<span class="br0">&#40;</span>Singleton2<span class="br0">&#41;</span>: <span class="kw1">pass</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">x = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">y = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">x <span class="kw1">is</span> y <span class="co1">#True</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> x, y</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="kw2">id</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span>, <span class="kw2">id</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Son olarak da Metaclass olarak kullanabileceğiniz bir Singleton</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> SingletonMetaClass<span class="br0">&#40;</span><span class="kw2">type</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,name,bases,dct<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>SingletonMetaClass,<span class="kw2">self</span><span class="br0">&#41;</span>.<span class="kw4">__init__</span><span class="br0">&#40;</span>name,bases,dct<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; original_new = <span class="kw2">self</span>.<span class="kw4">__new__</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> new_new<span class="br0">&#40;</span><span class="kw2">self</span>,*args,**kwargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">getattr</span><span class="br0">&#40;</span><span class="kw2">self</span>, <span class="st0">&quot;_%s__instance&quot;</span> % name, <span class="kw2">None</span><span class="br0">&#41;</span> <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">setattr</span><span class="br0">&#40;</span><span class="kw2">self</span>,<span class="st0">&quot;_%s__instance&quot;</span> % name,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; original_new<span class="br0">&#40;</span><span class="kw2">self</span>,*args,**kwargs<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">getattr</span><span class="br0">&#40;</span><span class="kw2">self</span>,<span class="st0">&quot;_%s__instance&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw4">__new__</span> = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>new_new<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Deneme<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw4">__metaclass__</span> = SingletonMetaClass</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">x = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">y = Deneme<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">x <span class="kw1">is</span> y</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> x, y</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="kw2">id</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span>, <span class="kw2">id</span><span class="br0">&#40;</span>y<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Ayrıca;<br />
<a href="http://www.omerucel.com" target="_blank">Ömer Ücel</a>&#8216;in paylaştığı, kullanımı ve anlaşılması kolay <a href="http://omerucel.com/2010/07/10/python-singleton-pattern/" target="_blank">bir Singleton örneği</a><br />
Metaclass __call__ metodu üzerinden çalışan <a href="http://stackoverflow.com/questions/31875/is-there-a-simple-elegant-way-to-define-singletons-in-python/33201#33201" target="_self">bir Singleton</a> ( benim yazdığıma oranla daha kolay anlaşır bir örnek )<br />
Alex Martelli&#8217;nin <a href="http://code.activestate.com/recipes/66531/#c20" target="_blank">Borg yöntemi</a> ( Singleton&#8217;dan daha iyi bir performansa sahip olduğu söyleniyor ve daha kolay )<br />
Ve tam amacına yönelik <a href="http://code.activestate.com/recipes/52558/#c10" target="_blank">bir Singleton örneği</a> ( Thread uygulamalarda güvenlik sağlıyor )<br />
Son olarak <a href="http://www.garyrobinson.net/" target="_blank">Gary Robinson</a> adındaki şahsın önce yazdığı Singleton örneğine sonra <a href="http://garyrob.blogs.com/.a/6a00d8341da47953ef00e55023bc838833-150wi" target="_blank">profil resmine</a> bakınca karizmasıyla dudak uçuklatıp &#8220;Baba aşmış, baba coder; insan yazar, insan anlamaz, interpreter arada kalır&#8221; dedirten <a href="http://www.garyrobinson.net/singletonmixin.py">bir örnek</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/singleton-tasarim-deseni.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metaclass</title>
		<link>http://www.brsyuksel.com/metaclass.html</link>
		<comments>http://www.brsyuksel.com/metaclass.html#comments</comments>
		<pubDate>Thu, 15 Jul 2010 02:20:44 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[metaclass]]></category>
		<category><![CDATA[__metaclass__]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=115</guid>
		<description><![CDATA[Ve metaclass&#8217;lar. Örnek kodlara, açıklayıcı belgelere ve Guido van Rossum tarafından yazılıp Fred L. Drake, Jr. tarafından düzenlenmiş bir HOWTO Metaclasses kitabına rastlanmasa da aslında gayet basit bir konu. İlk bakışta mantığını anlamak güç gelebilir ancak üstüne gittiğinizde gerçekten kolay ve kullanışlı olduğunu fark edeceksiniz. Nedir Metaclass&#8217;lar? Metaclass&#8217;lar basitçe açıklamak gerekirse &#8220;bir sınıfın sınıfıdır&#8221;. Bir [...]]]></description>
			<content:encoded><![CDATA[<p>Ve metaclass&#8217;lar. Örnek kodlara, açıklayıcı belgelere ve Guido van Rossum tarafından yazılıp Fred L. Drake, Jr. tarafından düzenlenmiş bir HOWTO Metaclasses kitabına rastlanmasa da aslında gayet basit bir konu. İlk bakışta mantığını anlamak güç gelebilir ancak üstüne gittiğinizde gerçekten kolay ve kullanışlı olduğunu fark edeceksiniz.</p>
<p><span id="more-115"></span></p>
<p>Nedir Metaclass&#8217;lar? Metaclass&#8217;lar basitçe açıklamak gerekirse &#8220;bir sınıfın sınıfıdır&#8221;. Bir sınıf, metaclass olacak şekilde tanımlanmış bir sınıfı metaclass olarak alıyorsa, o sınıfın örneğidir. Metaclass&#8217;lar genel olarak kapsayıcı (wrapper) olarak kullanılırlar. Bu size biraz Descriptor mantığını hatırlatabilir ancak farkını örnek kodlarda göreceksiniz.</p>
<p>Metaclass&#8217;ları tanımlarken, taban sınıf ( baseclass, superclass ) &#8220;type&#8221; olmalı. Bunun dışında tabii diğer tanımlanmış Metaclass&#8217;lar da olabilir. Her sınıf gibi Metaclass&#8217;larda da ilk önce __new__() ve sonrasında __init__() metodları çağrılır. Metaclass&#8217;larda fark olarak bu çağrılardan sonra __call__() metodu çağrılmaktadır. Bu çağrıların parametreleri şu şekilde:</p>
<p><strong>__new__(metacls,name,bases,dict)</strong><br />
metacls: Metaclass olarak tanımlanmış sınıf. Hatırlarsanız __new__() metoduna giden ilk parametre örneği oluşturulacak sınıfın kendisiydi.<br />
name: Metaclass&#8217;ı kullanan sınıfın ismi. String bir değer.<br />
bases: Metaclass&#8217;ı kullanan sınıfın kullandığı/türetildiği taban sınıflar.<br />
dict: Metaclass&#8217;ı kullanan sınıfın niteliklerini barındıran sözlük.</p>
<p><strong>__init__(self,name,bases,dict)</strong><br />
self: Biliyorsunuz, Metaclass&#8217;ı kullanan sınıf aynı zamanda Metaclass&#8217;ın bir örneği olduğu için ilk parametre o.<br />
name, bases ve dict parametreleri __new__ metoduna gönderilen parametrelerle aynı.</p>
<p><strong>__call__(self[,arg1,arg2,arg3...])</strong><br />
Sanırım burda parametreleri açıklamaya pek de gerek yok <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Örnek bir Metaclass tanımlayıp kullanalım.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Meta<span class="br0">&#40;</span><span class="kw2">type</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__new__</span><span class="br0">&#40;</span>meta,name,bases,<span class="kw2">dict</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__new__&quot;</span>, meta, name, bases, <span class="kw2">dict</span> <span class="co1">#bu ciktilari almak anlamaniz acisindan yararli olacak</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">super</span><span class="br0">&#40;</span>Meta,meta<span class="br0">&#41;</span>.<span class="kw4">__new__</span><span class="br0">&#40;</span>meta,name,bases,<span class="kw2">dict</span><span class="br0">&#41;</span> <span class="co1">#type(name,bases,dict) ile ayni gorevi gordugunu fark etmissinizdir.</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,name,bases,<span class="kw2">dict</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__init__&quot;</span>, <span class="kw2">self</span>, name, bases, <span class="kw2">dict</span> <span class="co1">#burda selfin ve new&#8217;de kullanilan meta&#8217;nin farkini goreceksiniz.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__call__</span><span class="br0">&#40;</span><span class="kw2">self</span>,*args,**kwargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__call__&quot;</span>, <span class="kw2">self</span>, args, kwargs</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">__metaclass__</span> = Meta <span class="co1">#artik Sinif isimli sinifimiz, ayni zamanda Meta isimli sinifin ornegi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">Ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Şimdi adım adım bakacak olursak:<br />
İlk olarak söylediğim gibi __new__ metodu çağrılıyor. Giden parametreler sırasıyla:<br />
<em>&lt;class &#8216;__main__.Meta&#8217;&gt; Sinif (&lt;type &#8216;object&#8217;&gt;,) {&#8216;__module__&#8217;: &#8216;__main__&#8217;, &#8216;__metaclass__&#8217;: &lt;class &#8216;__main__.Meta&#8217;&gt;}</em><br />
Ve __new__ metodu bize verilen parametreler ile bir örnek, bir nesne oluşturup döndürüyor.</p>
<p>İkinci adımda ise __init__ metodu çağrılıyor. Burda da giden parametreler sırasıyla şu şekilde:<br />
<em>&lt;class &#8216;__main__.Sinif&#8217;&gt; Sinif (&lt;type &#8216;object&#8217;&gt;,) {&#8216;__module__&#8217;: &#8216;__main__&#8217;, &#8216;__metaclass__&#8217;: &lt;class &#8216;__main__.Meta&#8217;&gt;}</em><br />
Gördüğünüz gibi __init__ metodunun gelen parametreleri ekrana bastırmak başka bir işlemi yok.</p>
<p>Son olarak ise __call__ metodu çağrılıyor. İşte Sinif&#8217;in Meta sınıfının örneği olduğunu bize gösterecek çağrı. <a href="http://www.brsyuksel.com/sinif-ozellikleri-ve-yeni-stil-siniflar.html" target="_blank">Sınıf Özellikleri ve Yeni Stil</a> Sınıflar yazımda bahsettiğim __call__ metodu kullanımını hatırlayın, sınıf örneğinin çağrılabilir fonksiyon gibi davranmasını sağlıyordu. Örnek vermek gerekirse</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__call__</span><span class="br0">&#40;</span><span class="kw2">self</span>,yazi<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> yazi</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#Sinifi orneklendirdik.</span></div>
</li>
<li class="li1">
<div class="de1">ornek<span class="br0">&#40;</span><span class="st0">&quot;deneme&quot;</span><span class="br0">&#41;</span> <span class="co1">#cikti: &quot;deneme&quot;</span></div>
</li>
</ol>
</div>
<p>__call__ metodunun Metaclass kullanımında yarattığı etki de aynı. Metaclass&#8217;ı kullanan sınıf, orneklendirildiği anda tanımlıysa __new__ ve sonrasında __init__ metodları çağrılırken, bir yandan da Metaclass sınıfının örneği olduğu için Metaclass&#8217;da tanımlanmışsa __call__ metodunu çağırıyor. Farkı anlamak için Meta ve Sinif orneklerinin bulunduğu örnek kodda &#8220;Sinif(&#8216;deneme&#8217;)&#8221; vb. değişiklikler yapabilirsiniz.</p>
<p>Bitti. Kaynaklara bir göz atın derim. Özellikle descintro&#8217;da yer alan autoprop ve autosuper örnekleri çok ilginizi çekecek ( o kadar kullanışlılar ki, <a href="http://www.pardus.org.tr/projeler/pisi/" target="_blank">Pisi</a>&#8216;nin kaynak kodlarında &#8220;Guido&#8217;s cool metaclass examples. fair use. ahahah. I find these quite handy. Use them : )&#8221; açıklama satırlarıyla kendilerine rastladım. <a href="http://svn.pardus.org.tr/uludag/trunk/pisi/pisi/oo.py" target="_blank">Burada</a> ) Ayrıca metaclass&#8217;ların önceki yapıda nasıl kullanıldığını öğrenmek de faydalı olacaktır.</p>
<p><a href="http://www.python.org/download/releases/2.2.3/descrintro/#metaclasses" target="_blank">http://www.python.org/download/releases/2.2.3/descrintro/#metaclasses</a><br />
<a href="http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python" target="_blank"> http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python</a><br />
<a href="http://gnosis.cx/publish/programming/metaclass_1.html" target="_blank"> http://gnosis.cx/publish/programming/metaclass_1.html</a><br />
<a href="http://en.wikibooks.org/wiki/Python_Programming/MetaClasses" target="_blank"> http://en.wikibooks.org/wiki/Python_Programming/MetaClasses</a><br />
<a href="http://www.voidspace.org.uk/python/articles/metaclasses.shtml" target="_blank"> http://www.voidspace.org.uk/python/articles/metaclasses.shtml<br />
</a><a href="http://effbot.org/zone/metaclass-plugins.htm" target="_blank">http://effbot.org/zone/metaclass-plugins.htm<br />
</a><a href="http://pastebin.com/pBL5H6Dn" target="_blank">http://pastebin.com/pBL5H6Dn</a> ( Gene Singleton, bu sefer Metaclass olarak, &#8220;Thinking in Python&#8221; kitabından, &#8220;The pattern concept&#8221; başlığı altında )</p>
<p>Ve&#8230;<br />
<a href="http://en.wikipedia.org/wiki/Metaclass" target="_blank"> http://en.wikipedia.org/wiki/Metaclass</a><br />
<a href="http://en.wikipedia.org/wiki/Metaobject_protocol" target="_blank"> http://en.wikipedia.org/wiki/Metaobject_protocol</a><br />
<a href="http://www.eksisozluk.com/show.asp?t=aspect+oriented+programming" target="_blank"> http://www.eksisozluk.com/show.asp?t=aspect+oriented+programming</a><br />
<a href="http://en.wikipedia.org/wiki/Aspect_Oriented_Programming" target="_blank"> http://en.wikipedia.org/wiki/Aspect_Oriented_Programming</a><br />
Dahası da size kalmış&#8230;</p>
<p><em>Metaclass konusuna değinmiş olduğuma göre tasarım desenlerine geçmeden önce aklıma gelen bilumum gereksiz programlamaya zaman ayırarak fena bir şekilde eğlenip cozutabilirim.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/metaclass.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bir Sonraki Yazıdan Önce: Matryoshka</title>
		<link>http://www.brsyuksel.com/bir-sonraki-yazidan-once-matryoshka.html</link>
		<comments>http://www.brsyuksel.com/bir-sonraki-yazidan-once-matryoshka.html#comments</comments>
		<pubDate>Fri, 09 Jul 2010 23:45:06 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[matruşka]]></category>
		<category><![CDATA[matryoshka]]></category>
		<category><![CDATA[steganografi]]></category>
		<category><![CDATA[steganography]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=109</guid>
		<description><![CDATA[Sınıf Özellikleri ve Yeni Stil Sınıflar başlıklı yazımda &#8220;Bir sonraki yazıda __metaclass__ konusuna değineceğim&#8221; demiştim, yalan söyledim. Son zamanlar o kitap senin bu kitap benim okumaktan sıkıldığım için biraz ara verip farklı birşeylerle uğraşmak istedim. Her zamanki gibi bir anlık esintiyle, adı (matryoshka = matruşka) amacına yakışır bu steganografi uygulaması çıktı ortaya. Çocukluğumdan beri saman [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.brsyuksel.com/sinif-ozellikleri-ve-yeni-stil-siniflar.html">Sınıf Özellikleri ve Yeni Stil Sınıflar</a> başlıklı yazımda &#8220;Bir sonraki yazıda __metaclass__ konusuna değineceğim&#8221; demiştim, yalan söyledim.</p>
<p>Son zamanlar o kitap senin bu kitap benim okumaktan sıkıldığım için biraz ara verip farklı birşeylerle uğraşmak istedim. Her zamanki gibi bir anlık esintiyle, adı (matryoshka = <a href="http://tr.wikipedia.org/wiki/Matru%C5%9Fka">matruşka</a>) amacına yakışır bu steganografi uygulaması çıktı ortaya. Çocukluğumdan beri saman altından su yürütmeye bayıldığım için bu uygulamayı geliştirirken çok fena eğleneceğim gibi duruyor.<br />
<span id="more-109"></span></p>
<p>Steganografi&#8217;den kısaca bahsetmek gerekirse, iletilmesi istenen mesajın masumca görünen bir içerik ile örtülerek ulaştırılmasıdır. &#8220;Bilgiyi saklama sanatı&#8221; olarak anılması çok hoşuma gidiyor. M.Ö. 5. yy&#8217;da Pers saldırısından önce uyarı mesajının bir kölenin saçları kazıtıldıktan sonra kafasına dövme olarak işlenip saçları uzadığında mesajın istenilen yere dikkat çekmeden ulaştırılmasıyla ilk defa kullanılan steganografi, günümüzde kolbastı adı altında ortaya konulan figürlerle yüzeysel bir bakışta dans ettiği sanılan kişinin aslında çok gıdıklandığı mesajını vermek istemesiyle karşımıza çıkar.</p>
<p>Bilgisayar dünyasında steganografinin kullanımına dönecek olursak, asıl amaç istenilen veriyi başka bir veri ( örtü veri ) altında gizlemek. Ancak bu işlemi yaparken insan algısının fark edemeyeceği boyutta yapmaya dikkat ettiğiniz gibi steganaliz uygulamalarını da hesaba katmanız gerekiyor. Matryoshka, bu örnek sürümünde asıl amacını yerine getirse de veriyi saklarken her karakterin bitlerini sırasıyla piksellerin mavi tonuna ait en düşük anlamlı bitlerini değiştirirek yaptığından dolayı resime bakıp steganografi yapıldığını anlamanız mümkün olmasa da bir hex editörle açıp kağıt kalem üzerinde hesap yaparak saklanan mesajı bulmanız çok kolay. Fakat bu söylediğim gibi &#8220;örnek&#8221; sürüme özgü bir durum olacak.</p>
<p>24-Bit Windows BMP dosyaları üzerinde bu işlemin nasıl yaptığından kısaca bahsedeyim. 24-Bit Windows BMP dosyalarında ilk 54 byte&#8217;lık veri başlık (header) bilgilerini taşıyor. İlk 2 byte 4D42 değerini taşıyor, &#8220;BM&#8221;, BMP dosya türüne ait imza. Dikkat ettiyseniz tersten sıralanmış. Bunun sebebi işlemci mimarisiymiş, &#8220;byte order, litte endian, big endian&#8221; anahtar kelimelerini kullanarak amacınıza ulaşabilirsiniz. Bu 54 byte&#8217;lık başlık bilgisinin 0x1C. offsetten ( yani ilk 28 byte&#8217;ı atlayın ) başlayarak 2 byte&#8217;lık veri resmin renk kanalı bilgisini taşıyor, 24-Bit&#8217;lik bir BMP dosyasında &#8216;\x18\x00\&#8217; değeriyle karşılacaksınız. Dediğim gibi işlemci &#8220;little endian&#8221; sistemi kullandığından dolayı bu değeri hesaplamak istediğinizde 0&#215;0018 şeklinde hesaplayacaksınız. Bunun için de bitsel operatörlerden yararlanmak gerekiyor. Son olarak 0&#215;02. offsetten itibaren 4 byte&#8217;lık veri dosya boyutu bilgisini, 0x0A. offsetten itibaren 4 byte&#8217;lık bilgi ise pixellere ait 3&#8242;er byte&#8217;lık verilerin kaçıncı offsetten (0&#215;36, 54) başladığı bilgisini taşıyor. 0&#215;36. offsetten itibaren her piksel için 3&#8242;er byte&#8217;lık veri bulacaksınız, Kırmızı-Yeşil-Mavi (RGB) tonları için değerler bu şekilde barındırılıyor ancak bu da tahminim ters sıralanmış ( incelemedim bunu ). Sonrasında herhangi bir renk tonunun, en düşük anlamlı bite ( yani son bit, bu tersten değil <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) ait değeri saklanacak verinize ait bitlerle değiştirerek saklayabilirsiniz. Bu arada ilk 3 byte&#8217;lık değeri değiştirerek sol üst köşedeki pikseli bozduğunuzu sanıyorsanız yanılıyorsunuz, sol alt köşedeki pikseli bozmuş olacaksınız ( herşey tersten, tersten! ).</p>
<p>Matryoshka&#8217;ya geçelim artık. Matryoshka&#8217;nın ilk etapta algoritması değişecek. Alakalı bitleri birbirinden ayrı olacak şekilde pikselleri belirli bir periyotta bozarak saklamaya çalışacağım. Bunun için aklımda bir kaç yöntem var. Sonrasında edindiğim/ediğineceğim python özellikleri ve tasarım desenleri bilgisini Matryoshka üzerinde uygulayacağım, böylece geliştirilmesi kolay olacak. Ardına tahmin edebileceğiniz bir çok dosya türünün desteklenmesi sağlanacak. Veri sıkıştırma, veri şifreleme, GUI derken üstüne çalışılacak çok nokta var. Dediğim gibi Matryoshka beni gerçekten heyecanlandıran bir proje. Bu yüzden üzerine fazlaca düşeceğim.</p>
<p>iContacts&#8217;ı geliştirme sözlerim hepsi yalandı, onu ileride C&#8217;de kodlayıp çok farklı bir yapıya kavuşturmak istiyorum, onun hakkında gerçekten çok güzel fikirlerim var.</p>
<p>Sanırım yeter. Matryoshka&#8217;ya şöyle bir bakıp geçmek isteyenler için kaynak kodu:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#-*- coding:utf-8 -*-</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp;hayir hayir, plagi ters cevirme, o baska bir konu</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;__ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;__ &nbsp; &nbsp;__ &nbsp; &nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp; ____ ___ &nbsp;____ _/ /________ &nbsp;______ &nbsp;_____/ /_ &nbsp;/ /______ _</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp;/ __ `__ \/ __ `/ __/ ___/ / / / __ \/ ___/ __ \/ //_/ __ `/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; / / / / / / /_/ / /_/ / &nbsp;/ /_/ / /_/ (__ &nbsp;) / / / ,&lt; / /_/ / </span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp;/_/ /_/ /_/\__,_/\__/_/ &nbsp; \__, /\____/____/_/ /_/_/|_|\__,_/ &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /____/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;brsyuksel.com</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">sys</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> matryoshka_write<span class="br0">&#40;</span>fbmp,ftxt,fout<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fbmp = <span class="kw2">open</span><span class="br0">&#40;</span>fbmp,<span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;resim dosyasi bulunamadi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> != <span class="st0">&#8216;BM&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span>, <span class="st0">&quot;matryoshka sadece Windows BMP dosyalari ile calisabilir&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span>0x1C<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch = <span class="kw2">sum</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="kw2">ord</span><span class="br0">&#40;</span>ch<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>&lt;&lt;<span class="nu0">8</span>*i <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>ch<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ch != <span class="nu0">24</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span>, <span class="st0">&quot;matryoshka sadece 24-Bit BMP dosyalari ile calisabilir&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; filesize = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; filesize = <span class="kw2">sum</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="kw2">ord</span><span class="br0">&#40;</span>filesize<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>&lt;&lt;<span class="nu0">8</span>*i <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>filesize<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span>0x0A<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; offset = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; offset = <span class="kw2">sum</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="kw2">ord</span><span class="br0">&#40;</span>offset<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>&lt;&lt;<span class="nu0">8</span>*i <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>offset<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; imgdata = filesize &#8211; offset</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ftxt = <span class="kw2">open</span><span class="br0">&#40;</span>ftxt,<span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;mesaj dosyasi bulunamadi&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; txt = ftxt.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; txt += <span class="kw2">chr</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ftxt.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>txt<span class="br0">&#41;</span>*<span class="nu0">8</span> &gt; imgdata/<span class="nu0">3</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span>, <span class="st0">&quot;saklanacak veri resim dosyasi icin cok buyuk&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fout = <span class="kw2">open</span><span class="br0">&#40;</span>fout,<span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;cikti dosyasi olusturulamadi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fout.<span class="me1">write</span><span class="br0">&#40;</span>fbmp.<span class="me1">read</span><span class="br0">&#40;</span>offset<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>txt<span class="br0">&#41;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chrasc = <span class="kw2">ord</span><span class="br0">&#40;</span>txt<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> j <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">7</span>,<span class="nu0">-1</span>,<span class="nu0">-1</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stegbyte = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw2">ord</span><span class="br0">&#40;</span>data<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp; 0xFE<span class="br0">&#41;</span> | <span class="br0">&#40;</span><span class="br0">&#40;</span>chrasc &amp; <span class="br0">&#40;</span><span class="nu0">1</span>&lt;&lt;j<span class="br0">&#41;</span><span class="br0">&#41;</span>&gt;&gt;j<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data = data<span class="br0">&#91;</span>:<span class="nu0">2</span><span class="br0">&#93;</span> + <span class="kw2">chr</span><span class="br0">&#40;</span>stegbyte<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fout.<span class="me1">write</span><span class="br0">&#40;</span>data<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>txt<span class="br0">&#41;</span>*<span class="nu0">8</span> != imgdata/<span class="nu0">3</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fout.<span class="me1">write</span><span class="br0">&#40;</span>fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fout.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">def</span> matryoshka_read<span class="br0">&#40;</span>fbmp,ftxt<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fbmp = <span class="kw2">open</span><span class="br0">&#40;</span>fbmp,<span class="st0">&quot;r&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;resim dosyasi bulunamadi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> != <span class="st0">&#8216;BM&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span>, <span class="st0">&quot;matryoshka sadece Windows BMP dosyalari ile calisabilir&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span>0x1C<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ch = <span class="kw2">sum</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="kw2">ord</span><span class="br0">&#40;</span>ch<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>&lt;&lt;<span class="nu0">8</span>*i <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>ch<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> ch != <span class="nu0">24</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span>, <span class="st0">&quot;matryoshka sadece 24-Bit BMP dosyalari ile calisabilir&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span>0x0A<span class="br0">&#41;</span>&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; offset = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; offset = <span class="kw2">sum</span><span class="br0">&#40;</span><span class="br0">&#91;</span><span class="kw2">ord</span><span class="br0">&#40;</span>offset<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>&lt;&lt;<span class="nu0">8</span>*i <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>offset<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ftxt = <span class="kw2">open</span><span class="br0">&#40;</span>ftxt,<span class="st0">&quot;w&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;cikti dosyasi olusturulamadi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">seek</span><span class="br0">&#40;</span>offset<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="kw2">True</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; charasc = <span class="nu0">0</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="nu0">7</span>,<span class="nu0">-1</span>,<span class="nu0">-1</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; data = fbmp.<span class="me1">read</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; charasc |= <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw2">ord</span><span class="br0">&#40;</span>data<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp; 0&#215;01<span class="br0">&#41;</span> &lt;&lt; i<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> charasc == <span class="nu0">0</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ftxt.<span class="me1">write</span><span class="br0">&#40;</span><span class="kw2">chr</span><span class="br0">&#40;</span>charasc<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ftxt.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fbmp.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> __name__ == <span class="st0">&#8216;__main__&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#41;</span> == <span class="nu0">1</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Kullanim:&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;matryoshka yaz bmpdosyasi txtdosyasi bmpciktidosyasi&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;matryoshka oku bmpdosyasi txtciktidosyasi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> == <span class="st0">&#8216;yaz&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; matryoshka_write<span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> == <span class="st0">&#8216;oku&#8217;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; matryoshka_read<span class="br0">&#40;</span><span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>,<span class="kw3">sys</span>.<span class="me1">argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;Kullanim:&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;matryoshka yaz bmpdosyasi txtdosyasi bmpciktidosyasi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;matryoshka oku bmpdosyasi txtciktidosyasi&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>&#8220;Ben hackerım, çok da tehlikeliyim saklamam gereken özel bilgilerim var, ben kullanırım bunu, lamer değilim ben!&#8221; diyerek bizi güldürecek ya da sadece indirmek isteyenler için tar.gz arşivi:<br />
<a href="http://brsyuksel.com/wp-content/uploads/matryoshka.tar.gz" target="_blank">matryoshka.tar.gz</a></p>
<p>Tüm bunları Alpcan Aydın okusun da Matryoshka&#8217;yı hızlı bir şekilde geliştirelim diye anlattım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/bir-sonraki-yazidan-once-matryoshka.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sınıf Özellikleri ve Yeni Stil Sınıflar</title>
		<link>http://www.brsyuksel.com/sinif-ozellikleri-ve-yeni-stil-siniflar.html</link>
		<comments>http://www.brsyuksel.com/sinif-ozellikleri-ve-yeni-stil-siniflar.html#comments</comments>
		<pubDate>Sat, 26 Jun 2010 22:45:31 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[classic classes]]></category>
		<category><![CDATA[classmethod]]></category>
		<category><![CDATA[descriptors]]></category>
		<category><![CDATA[new-style classes]]></category>
		<category><![CDATA[özel yöntem isimleri]]></category>
		<category><![CDATA[property]]></category>
		<category><![CDATA[special method names]]></category>
		<category><![CDATA[staticmethod]]></category>
		<category><![CDATA[super]]></category>
		<category><![CDATA[yeni stil sınıflar]]></category>
		<category><![CDATA[__mro__]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=99</guid>
		<description><![CDATA[Başlık biraz tuhaf oldu, insan ilk bakışta SOAP&#8217;ın ÇORBA olarak çevirildiği programlama kitaplarından ( Teşekkürler M.Çileli ) alıntılar arıyor. Buna yakın çevirilere rastlarsanız pek de şaşırmayın. O kitaplara bakakaldığınız anları yaşayıp ardına verdiğiniz tepki içerisinde adımın geçmemesi için belirli terim ve konu başlıklarının yanında ingilizcelerini yazmayı ihmal etmedim Bazı konu başlıklarını ise direkt ingilizce verdim. [...]]]></description>
			<content:encoded><![CDATA[<p>Başlık biraz tuhaf oldu, insan ilk bakışta SOAP&#8217;ın ÇORBA olarak çevirildiği programlama kitaplarından ( Teşekkürler M.Çileli <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) alıntılar arıyor. Buna yakın çevirilere rastlarsanız pek de şaşırmayın. O kitaplara bakakaldığınız anları yaşayıp ardına verdiğiniz tepki içerisinde adımın geçmemesi için belirli terim ve konu başlıklarının yanında ingilizcelerini yazmayı ihmal etmedim <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Bazı konu başlıklarını ise direkt ingilizce verdim. Lafı daha fazla uzatmadan konuya geçiyorum.<br />
<span id="more-99"></span><br />
Yeni stil sınıflara (new-style classes) geçmeden önce, eski yapıda da kullanabildiğimiz Özel Yöntem İsimlerinden (Special Method Names) bahsedeyim.</p>
<h3>Temel Uyarlama (Basic Costumization)</h3>
<p><strong>__init__(self[, ...])</strong><br />
Bildiğiniz gibi sınıf örneklendirildiğinde (instance) çalışır. Örneği hazırlama (initialization) amaçlıdır.</p>
<p><strong>__del__(self)</strong><br />
Sınıf örneği silinirken çalışır. Tahmin edebileceğiniz gibi silme için kullanılır.</p>
<p><strong>__repr__(self)</strong><br />
Sınıf örneği repr() yerleşik fonksiyonuna parametre olarak verildiğinde çalışır.</p>
<p><strong>__str__(self)</strong><br />
Sınıf örneği str() yerleşik fonksiyonuna parametre olarak verildiğinde ve &#8220;print&#8221; ifadesiyle gönderildiğinde çalışır.</p>
<p><strong>__hash__(self)</strong><br />
Sınıf örneği hash() yerleşik fonksiyonuna parametre olarak verildiğinde çalışır.</p>
<p><strong>__nonzero__(self)</strong><br />
Sınıf örneğinin True/False değer testi yapıldığında çalışır. 0 veya 1 sonucunu dönmelidir.</p>
<p>Şimdi diğer özel yöntemlere geçmeden önce yukarıda açıkladıklarım için basit bir örnek yapalım.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,ornStr=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">ornStr</span> = ornStr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">ornList</span> = <span class="br0">&#91;</span><span class="st0">&quot;a&quot;</span>,<span class="st0">&quot;b&quot;</span>,<span class="st0">&quot;c&quot;</span><span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__del__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__del__ çalıştı&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__repr__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">repr</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ornList</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__str__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">str</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ornStr</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__hash__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">hash</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ornStr</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__nonzero__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ornStr</span><span class="br0">&#41;</span> &gt; <span class="nu0">0</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="st0">&quot;deneme&quot;</span><span class="br0">&#41;</span> <span class="co1">#__init__ calisti</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> <span class="kw2">repr</span><span class="br0">&#40;</span>ornek<span class="br0">&#41;</span> <span class="co1">#__repr__ calisti, cikti &quot;['a','b','c']&quot;</span></div>
</li>
<li class="li1">
<div class="de1">x = <span class="kw2">str</span><span class="br0">&#40;</span>ornek<span class="br0">&#41;</span> <span class="co1">#__str__ calisti, x degiskenine &quot;deneme&quot; degeri atandi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek <span class="co1">#__str__ calisti, cikti &quot;deneme&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="kw2">hash</span><span class="br0">&#40;</span>ornek<span class="br0">&#41;</span> <span class="co1">#__hash__ calisti</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="kw2">bool</span><span class="br0">&#40;</span>ornek<span class="br0">&#41;</span> <span class="co1">#__nonzero__ calisti, ornStr uzunlugu 0&#8242;dan buyuk oldugu icin True dondu</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span> ornek <span class="kw1">is</span> <span class="kw2">True</span>: <span class="kw1">print</span> <span class="st0">&quot;sonuc:true&quot;</span> <span class="co1">#__nonzero__ calisti</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">del</span> ornek <span class="co1">#__del__ calisti, ornek silindi, cikti &quot;__del__ çalıştı&quot;</span></div>
</li>
</ol>
</div>
<p><strong>__lt__(self,diger)<br />
__le__(self,diger)<br />
__eq__(self,diger)<br />
__ne__(self,diger)<br />
__gt__(self,diger)<br />
__ge__(self,diger)<br />
</strong> Aynı sınıfın iki farklı örneği arasında mantıksal karşılaştırmalar sırasında çalışırlar. Sırasıyla x&lt;=y, x==y, x!=y (x&lt;&gt;y),x&gt;y, x&gt;=y<br />
Sonuç olarak Boolean değer döndürmek daha verimli olacaktır.</p>
<p><strong>__cmp__(self,diger)<br />
</strong> Eğer yukarıdaki fonksiyonlar tanımlanmamışsa mantıksal karşılaştırmalar sırasında çalışır.  selfdiger durumunda pozitif bir sayı dönmelidir.</p>
<p>Yukarıdaki fonksiyonlar için basit birer örnek hazırlayalım.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,sayi=<span class="nu0">0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sayi</span> = sayi</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__lt__</span><span class="br0">&#40;</span><span class="kw2">self</span>,diger<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">sayi</span> &lt; diger.<span class="me1">sayi</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;kucuktur!&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">True</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;kucuk degil!&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">False</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">orneka = Sinif<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornekb = Sinif<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">orneka &lt; ornekb <span class="co1">#__lt__ calisti, cikti &quot;kucuktur!&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> orneka &lt; ornekb: <span class="kw1">print</span> <span class="st0">&quot;sonuc:kucuktur!&quot;</span> <span class="co1">#sart saglanir</span></div>
</li>
</ol>
</div>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,sayi=<span class="nu0">0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sayi</span> = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__cmp__</span><span class="br0">&#40;</span><span class="kw2">self</span>,diger<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">sayi</span> &lt; diger.<span class="me1">sayi</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elif</span> <span class="kw2">self</span>.<span class="me1">sayi</span> == diger.<span class="me1">sayi</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">orneka = Sinif<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornekb = Sinif<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">orneka &lt; ornekb <span class="co1">#True orneka == ornekb #False orneka &gt; ornekb #False</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#Burada __cmp__&#8217;nin -1,0 ya da 1 donmesine gore sonucun True/False olacagini yanilgisina kapilmayin. Verdiginiz degerler dogrultusunda yaptiginiz karsilastirmalar sonucu True/False sonucu alacaksiniz.</span></div>
</li>
</ol>
</div>
<h3>Niteliklere Erişimi Uyarlamak (Costumizing Attribute Access)</h3>
<p><strong>__getattr__(self,isim)<br />
</strong> İstenilen nitelik bulunamadığı zaman çalışır.</p>
<p><strong>__setattr__(self,isim,deger)<br />
</strong> Örneğin niteliğine değer ataması yapılırken çalışır.</p>
<p><strong>__delattr__(self,isim)<br />
</strong> Örneğin niteliğinin &#8220;del&#8221; ifadesi ile silinmesi sırasında çalışır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">2</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__getattr__</span><span class="br0">&#40;</span><span class="kw2">self</span>,isim<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;getattr!&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span>isim<span class="br0">&#93;</span> = <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__setattr__</span><span class="br0">&#40;</span><span class="kw2">self</span>,isim,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;setattr!&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span>isim<span class="br0">&#93;</span> = deger</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__delattr__</span><span class="br0">&#40;</span><span class="kw2">self</span>,isim<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;delattr!&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">del</span> <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span>isim<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">a</span> <span class="co1">#herhangi bir metod calismadi, cikti 1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">b</span> <span class="co1">#herhangi bir metod calismadi, cikti 2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">c</span> <span class="co1">#__getattr__ calisti, sinif niteliklerinin barindirildigi sozlukte (__dict__) &quot;c&quot; anahtarina karsilik -1 degeri atandi, cikti &quot;getattr! -1&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">c</span> <span class="co1">#herhangi bir metod calismadi. bir onceki adimda &quot;c&quot; niteligi zaten olusturuldu, cikti -1</span></div>
</li>
<li class="li2">
<div class="de2">ornek.<span class="me1">a</span> = <span class="nu0">4</span> <span class="co1">#__setattr__ calisti, nitelige istenen deger verildi, cikti &quot;setattr!&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">del</span> ornek.<span class="me1">a</span> <span class="co1">#__delattr__ calisti, nitelik silindi, cikti &quot;delattr!&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Burada sinifin nitelik sozlugu (__dict__) yerine &quot;</span><span class="kw2">self</span>.<span class="me1">isim</span> = deger<span class="st0">&quot; ifadesini kullanmamamizin sebebi, &quot;</span><span class="kw2">self</span>.<span class="me1">isim</span> = deger<span class="st0">&quot; ifadesinin rekursif fonksiyon gibi davranmasina sebep olmasi. Bu nedenle bu ifade yerine sozlugu tercih etmek gerekiyor.</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<h3>Çağrılabilir Nesne Olarak İşlemek (Emulating Callable Objects)</h3>
<p><strong>__call__(self[, ...])<br />
</strong> Sınıf örneğini bir fonksiyon gibi çağrıldığında çalışır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__call__</span><span class="br0">&#40;</span><span class="kw2">self</span>,*arg<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> arg<span class="br0">&#91;</span>:<span class="nu0">2</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek<span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span><span class="br0">&#41;</span> <span class="co1">#__call__ calisti, gonderilen ilk 2 arguman yazdirildi, cikti (1,2)</span></div>
</li>
</ol>
</div>
<h3>Kapsayıcı Tür Olarak İşlemek (Emulating Container Types)</h3>
<p><strong>__len__(self)<br />
</strong> Sınıf örneği len() yerleşik fonksiyonuna parametre olarak verildiğinde çalışır.</p>
<p><strong>__getitem__(self,anahtar)<br />
</strong> Sınıf örneğinin bir &#8220;ögesi&#8221; (örn:x[0],x["anahtar"] vb) istendiği zaman çalışır.</p>
<p><strong>__setitem__(self,anahtar,deger)<br />
</strong> Sınıf örneğinin bir ögesine değer ataması yapılırken çalışır.</p>
<p><strong>__delitem__(self,anahtar)<br />
</strong> Sınıf örneğinin bir ögesi silinirken çalışır.</p>
<p><strong>__iter__(self)<br />
</strong> Sınıf örneği iter() yerleşik fonksiyonuna parametre olarak verildiğinde çalışır. Bir iterator nesnesi dönmelidir.</p>
<p><strong>__contains__(self,item)<br />
</strong> Bir ögenin sınıf örneği ögeleri arasında olup olmadığı (1 in x, 1 not in x) denetlenirken çalışır. Boolean değer dönmelidir.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; dct = <span class="br0">&#123;</span><span class="st0">&quot;a1&quot;</span>:<span class="st0">&quot;d1&quot;</span>,<span class="st0">&quot;a2&quot;</span>:<span class="st0">&quot;d2&quot;</span>,<span class="st0">&quot;a3&quot;</span>:<span class="st0">&quot;d3&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__getitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span>.<span class="me1">has_key</span><span class="br0">&#40;</span>anahtar<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span><span class="br0">&#91;</span>anahtar<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__setitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span><span class="br0">&#91;</span>anahtar<span class="br0">&#93;</span> = deger</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__delitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">del</span> <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span><span class="br0">&#91;</span>anahtar<span class="br0">&#93;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__iter__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">iter</span><span class="br0">&#40;</span><span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__contains__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> anahtar <span class="kw1">in</span> <span class="kw2">self</span>.__class__.<span class="kw4">__dict__</span><span class="br0">&#91;</span><span class="st0">&quot;dct&quot;</span><span class="br0">&#93;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">True</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">False</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek<span class="br0">&#91;</span><span class="st0">&quot;a1&quot;</span><span class="br0">&#93;</span> <span class="co1">#__getitem__ calisti, cikti &quot;d1&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> ornek<span class="br0">&#91;</span><span class="st0">&quot;a4&quot;</span><span class="br0">&#93;</span> = <span class="st0">&quot;d4&quot;</span> <span class="co1">#__setitem__ calisti, sozlukte &quot;a4&quot; anahtarina karsilik &quot;d4&quot; degeri verildi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">del</span> ornek<span class="br0">&#91;</span><span class="st0">&quot;a4&quot;</span><span class="br0">&#93;</span> <span class="co1">#__delitem__ calisti, sozlukten &quot;a4&quot; anahtari silindi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">iter</span><span class="br0">&#40;</span>ornek<span class="br0">&#41;</span> <span class="co1">#__iter__ calisti, dictionary-keyiterator nesnesi olusturuldu</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;a3&quot;</span> <span class="kw1">in</span> ornek <span class="co1">#__contains__ calisti, sozluk &quot;a3&quot; anahtarina sahip oldugu icin True degeri donduruldu</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;a4&quot;</span> <span class="kw1">in</span> ornek <span class="co1">#__contains__ calisti, sozluk &quot;a4&quot; anahtarina sahip olmadigi icin False degeri donduruldu</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Burada da __*attr__ orneginde oldugu gibi &quot;</span><span class="kw2">self</span><span class="br0">&#91;</span>anahtar<span class="br0">&#93;</span> = deger<span class="st0">&quot; ifadesinin rekursif cagri yapmasindan dolayi onun yerine sinifin nitelik barindiran sozlugunu tercih ediyoruz.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<h3>Sayısal Tür Olarak İşlemek (Emulating Numeric Types)</h3>
<p><strong>__add__(self,diger)<br />
__sub__(self,diger)<br />
__mul__(self,diger)<br />
__floordiv__(self,diger)<br />
__mod__(self,diger)<br />
__divmod__(self,diger)<br />
__pow__(self,diger[, mod])<br />
__lshift__(self,diger)<br />
__rshift__(self,diger)<br />
__and__(self,diger)<br />
__xor__(self,diger)<br />
__or__(self,diger)<br />
</strong> Aynı sınıfın iki farklı örneği arasında matematiksel işlemler yapılırken çalışırlar. Sırasıyla +,-,*,//,%,divmod(),pow(),&lt;&lt;,&gt;&gt;,&amp;,^,|<br />
Örneğin x ve y&#8217;nin sınıf örnekleri olduğu düşünürsek, x+y işlemi yapıldığında x.__add__(y) çalışır.</p>
<p><strong>__div__(self,diger)<br />
__truediv__(self,diger)<br />
</strong> Aynı sınıfın iki farklı örneği arasında bölme işlemi yapılırken çalışırlar. Eğer __future__ kütüphanesinin division modülü uygulamaya dahil edilmişse __truediv__(), edilmemişse __div__() fonksiyonu çalışır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,sayi<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sayi</span> = sayi</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__add__</span><span class="br0">&#40;</span><span class="kw2">self</span>,diger<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">sayi</span> = <span class="kw2">self</span>.<span class="me1">sayi</span> + diger.<span class="me1">sayi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">orneka = Sinif<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornekb = Sinif<span class="br0">&#40;</span><span class="nu0">20</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">orneka + ornekb <span class="co1">#__add__ calisti, orneka.sayi degeri artık 30</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">print</span> orneka.<span class="me1">sayi</span> <span class="co1">#cikti 30</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#Sanirim digerleri icin ornek yapmaya gerek yok <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></div>
</li>
</ol>
</div>
<p>Bu arada, ben floordiv&#8217;den (//) bi&#8217; haberdim. Siz de benim gibi floordiv&#8217;in ne olduğunu bilmiyorsanız şöyle ifade edeyim. f(x,y): return (x &#8211; (x%y)) / y<br />
Bölen olarak verilen sayının bölünende kaç adet bulunduğunu veriyor diyelim. Bölme işleminin tam sayı olarak sonuç vermesiyle karıştırmayın <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>__radd__(self,diger)<br />
__rsub__(self,diger)<br />
__rmul__(self,diger)<br />
__rdiv__(self,diger)<br />
__rmod__(self,diger)<br />
__rdivmod__(self,diger)<br />
__rpow__(self,diger)<br />
__rlshift__(self,diger)<br />
__rrshift__(self,diger)<br />
__rand__(self,diger)<br />
__rxor__(self,diger)<br />
__ror__(self,diger)<br />
</strong> İki örnek arasında matematiksel işlem yaparken ifadenin sağında kalan örneğin tanımlanmış fonksiyonu çalışır.<br />
Örneğin x ve y&#8217;nin sınıf örnekleri olduğunu düşürsek, x+y işlemi sırasında y.__radd__(x) çalışır.</p>
<p><strong>__iadd__(self,diger)<br />
__isub__(self,diger)<br />
__imul__(self,diger)<br />
__idiv__(self,diger)<br />
__imod__(self,diger)<br />
__ipow__(self,diger[, mod])<br />
__ilshift__(self,diger)<br />
__irshift__(self,diger)<br />
__iand__(self,diger)<br />
__ixor__(self,diger)<br />
__ior__(self,diger)<br />
</strong> İki örnek arasında &#8220;kendi üzerine&#8221; matematiksel işlem yapılırken çalışır. Sırasıyla +=, -=, *=, /=, %=, **=, &lt;&lt;=, &gt;&gt;=, &amp;=, ^=, |=<br />
Örneğin x ve y&#8217;nin sınıf örnekleri olduğunu düşünürsek, x += y işlemi sırasında x.__iadd__(y) çalışır.</p>
<p><strong>__neg__(self)<br />
__pos__(self)<br />
__abs__(self)<br />
__invert__(self)<br />
</strong> Sınıf örneğinin matematiksel olarak işaretini değiştirme, mutlak değerini alma ( abs() fonksiyonuna parametre olarak gönderme ) ve bitsel değilini alma işlemleri sırasında çalışırlar. Örneğin, x&#8217;in sınıf örneği olduğunu düşünürsek; -x ifadesi x.__neg__(), +x ifadesi x.__pos__(), abs(x) fonksiyonu x.__abs__() ve ~x ifadesi x.__invert__() çağrılarını yapar.</p>
<p><strong>__complex__(self)<br />
__int__(self)<br />
__long__(self)<br />
__float__(self)<br />
</strong> Sınıf örneği sırasıyla complex(), int(), long(), float() fonksiyonlarına parametre olarak gönderildiğinde çalışırlar. Bu fonksiyonlar sonuç olarak uygun türü dönmelidir.</p>
<p><strong>__oct__()<br />
__hex__()<br />
</strong> Sınıf örneği sırasıyla oct(), hex() fonksiyonlarına parametre olarak gönderildiğinde çalışırlar. Bu fonksiyonlar string bir değer dönmelidir.</p>
<p><strong>__coerce__()<br />
</strong> Python Reference Manuel kitabında &#8220;karışık-mod&#8221; üzerinde aritmetik işlemler yaparken çalıştığı aktarılmış. Bir kaç kurala sahip. Basit bir şekilde kural şu: &#8220;verileri işlem operatörünün işleyebileceği şekle dönüştür ve işlemin kurallarına uyacak şekilde bir tüpün 2 ögesi olarak döndür&#8221;. Sonuç olarak uygun verileri bir tüpün 2 ögesi olarak ya da işlem başarısızlığı durumunda None dönmesi gerekiyor. Bunu bir örnekle anlatmak uygun olacak.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ornStr = <span class="st0">&quot;%s deneme %s&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__coerce__</span><span class="br0">&#40;</span><span class="kw2">self</span>,diger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">ornStr</span>,diger<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek % <span class="br0">&#40;</span><span class="st0">&quot;dnm&quot;</span>,<span class="st0">&quot;dnm&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">__coerce__ calisti, bir sinif ornegi ve bir tup ile moduler aritmek yapmaya calistik ancak __coerce__ fonksiyonumuzu moduler aritmetik islemiyle &quot;</span><span class="kw3">string</span> <span class="kw3">formatter</span><span class="st0">&quot; olacak sekilde tasarladigimiz icin gorevini o sekilde yerine getirdi.</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">cikti &quot;</span>dnm deneme dnm<span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek * <span class="nu0">3</span> <span class="co1"># Bu sefer &quot;%s deneme %s%s deneme %s%s deneme %s&quot; ciktisini aldik</span></div>
</li>
</ol>
</div>
<h2>Yeni Stil Sınıflar (New-Style Classes)</h2>
<p>Python 2.2 ile gelen yeni stil sınıfların, &#8220;class Sinif:&#8221; diyerek itelediğimiz eski yapıya göre en önemli farkı yerleşik türlerden (built-in types: int,float,str,tuple,dict vs.) türetilebilir olmasıdır. Bunlardan türetilmediği durumda object türünden türetilmesi gerekir.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>: <span class="kw1">pass</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> MyList<span class="br0">&#40;</span><span class="kw2">list</span><span class="br0">&#41;</span>: <span class="kw1">pass</span></div>
</li>
</ol>
</div>
<p>dict türünden türetilmiş bir sınıf örneği</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> mydict<span class="br0">&#40;</span><span class="kw2">dict</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">dict</span>.<span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__getitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">dict</span>.<span class="kw4">__getitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">-1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__setitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">dict</span>.<span class="kw4">__setitem__</span><span class="br0">&#40;</span><span class="kw2">self</span>,anahtar,deger<span class="nu0">+1</span><span class="br0">&#41;</span> <span class="co1"># deger+1 <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; x = mydict()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; x</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">{}</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&gt;&gt;&gt; x[&quot;</span>a<span class="st0">&quot;] = 0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; x[&quot;</span>a<span class="st0">&quot;]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; x</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">{&#8216;a&#8217;: 1}</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&gt;&gt;&gt; x[&quot;</span>b<span class="st0">&quot;]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">-1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<h3><strong>__slots__</strong></h3>
<p>Sınıf içerisinde __slots__&#8217;u tanımladığınız zaman sınıf örneği __dict__&#8217;e sahip olmayacaktır. Bu nedenle sizin __slots__&#8217;u tanımlayarak belirlediğiniz nitelikler dışında herhangi bir nitelik oluşturulamaz. __slots__&#8217;u tanımlarken bir list ile değer ataması yapılmalıdır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">__slots__</span> = <span class="br0">&#91;</span><span class="st0">&quot;a&quot;</span>,<span class="st0">&quot;b&quot;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; a = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">2</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">a</span> <span class="co1">#cikti 1</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> ornek.<span class="me1">b</span> <span class="co1">#cikti 2</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">a</span> = <span class="nu0">0</span> <span class="co1">#a niteligi 0 degerine sahip oldu</span></div>
</li>
<li class="li2">
<div class="de2">ornek.<span class="me1">c</span> = <span class="nu0">3</span> <span class="co1">#hata!</span></div>
</li>
</ol>
</div>
<h3>Descriptor</h3>
<p>Bir sınıfın niteliğine erişim sırasında __get__(), __set__(), __delete__() metodları ile erişimin yönetilmesini sağlar. Bu yönteme &#8220;binding behavior&#8221; adı verilir. Descriptor yapısı; property,method,static method,class method ve super&#8217;in arkasındaki yapıdır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Desc<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">deger</span> = deger</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__get__</span><span class="br0">&#40;</span><span class="kw2">self</span>,nesne,sinif<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;GET: &quot;</span>, nesne,sinif</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">deger</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__set__</span><span class="br0">&#40;</span><span class="kw2">self</span>,nesne,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;SET: &quot;</span>, nesne</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">deger</span> = deger</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__delete__</span><span class="br0">&#40;</span><span class="kw2">self</span>,nesne<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;DEL: &quot;</span>, nesne</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">del</span> <span class="kw2">self</span>.<span class="me1">deger</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; x = Desc<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; ornek = Sinif()</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; ornek.x</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">GET: &nbsp;&lt;__main__.Sinif object at 0xb7801fac&gt;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">10</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; ornek.x = 11</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">SET: &nbsp;&lt;__main__.Sinif object at 0xb7801fac&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; ornek.x</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">GET: &nbsp;&lt;__main__.Sinif object at 0xb7801fac&gt;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">11</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; del ornek.x</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">DEL: &nbsp;&lt;__main__.Sinif object at 0xb7801fac&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<p>Burada buna benzer bir yapıyı __*attr__ fonksiyonlarını kullanarak oluşturabileceğinizi düşünebilirsiniz ancak bildiğiniz gibi __*attr__ fonksiyonları sınıfın bütün niteliklerini kapsarken Descriptor&#8217;lar sadece tanımladığınız nitelikleri kapsayacaktır.</p>
<h3>Property</h3>
<p>Descriptor oluşturmanın diğer bir yolu denilebilir. Prototip&#8217;i şu şekilde:<br />
property(fget=None, fset=None, fdel=None, doc=None)</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__d = <span class="nu0">10</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> __getx<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__getx&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.__d</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> __setx<span class="br0">&#40;</span><span class="kw2">self</span>,deger<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__setx&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__d = deger</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> __delx<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__delx&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">del</span> <span class="kw2">self</span>.__d</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; OkuYazSil = <span class="kw2">property</span><span class="br0">&#40;</span>fget=__getx,fset=__setx,fdel=__delx,doc=<span class="st0">&quot;Oku-Yaz-Sil&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; OkuYaz = <span class="kw2">property</span><span class="br0">&#40;</span>fget=__getx,fset=__setx,doc=<span class="st0">&quot;Oku-Yaz&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; SadeceOku = <span class="kw2">property</span><span class="br0">&#40;</span>fget=__getx,doc=<span class="st0">&quot;Oku&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">OkuYazSil</span> <span class="co1">#cikti &quot;__getx 10&quot;</span></div>
</li>
<li class="li2">
<div class="de2">ornek.<span class="me1">OkuYazSil</span> = <span class="nu0">11</span> <span class="co1">#cikti &quot;__setx&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">OkuYazSil</span> <span class="co1">#cikti &quot;__getx 11&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">OkuYaz</span> <span class="co1">#cikti &quot;__getx 11&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">OkuYaz</span> = <span class="nu0">12</span> <span class="co1">#cikti &quot;__setx&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&gt;&gt;&gt; del ornek.OkuYaz</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Traceback (most recent call last):</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp;File &quot;</span><span class="st0">&quot;, line 1, in</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">AttributeError: can&#8217;t delete attribute</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<p>Property Descriptor&#8217;u &#8220;Descriptor HowTo Guide&#8221; kitabında şu şekilde verilmiş. Descriptor yapısının daha iyi kavranması için incelemekte fayda var.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Property<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,fget=<span class="kw2">None</span>,fset=<span class="kw2">None</span>,fdel=<span class="kw2">None</span>,doc=<span class="kw2">None</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">fget</span> = fget</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">fset</span> = fset</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">fdel</span> = fdel</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.__doc__ = doc</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__get__</span><span class="br0">&#40;</span><span class="kw2">self</span>,obj,objtype<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> obj <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">fget</span> <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">AttributeError</span>, <span class="st0">&quot;unreadable attribute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">fget</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__set__</span><span class="br0">&#40;</span><span class="kw2">self</span>,obj,value<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">fset</span> <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">AttributeError</span>, <span class="st0">&quot;can&#8217;t set attribute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">fset</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__delete__</span><span class="br0">&#40;</span><span class="kw2">self</span>,obj<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">fdel</span> <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">AttributeError</span>, <span class="st0">&quot;can&#8217;t delete attribute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">fdel</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<h3>Static Method</h3>
<p>Statik metodların özelliği, çağrılırken sınıf örneğini parametre olarak (self) almaya ihtiyaç duymaz. Bu nedenle sınıf örneklendirilmeden metod çağrılabilir. staticmethod() da property() gibi bir descriptor&#8217;dur.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;statik metod&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; stmetod = <span class="kw2">staticmethod</span><span class="br0">&#40;</span>metod<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Sinif.<span class="me1">stmetod</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;static method&quot;</span></div>
</li>
</ol>
</div>
<p>staticmethod descriptor&#8217;u şu şekilde:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> StaticMethod<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,f<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">f</span> = f</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__get__</span><span class="br0">&#40;</span><span class="kw2">self</span>,obj,objtype=<span class="kw2">None</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">f</span></div>
</li>
</ol>
</div>
<h3>Class Method</h3>
<p>Sınıf metodlarının statik metodlardan farkı, ilk parametre olarak sınıf referansını istemesidir. classmethod(), property() ve staticmethod() gibi bir başka descriptor&#8217;dur.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Sinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span>cls<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;sinif metodu&quot;</span>, cls</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; clmetod = <span class="kw2">classmethod</span><span class="br0">&#40;</span>metod<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Sinif.<span class="me1">clmetod</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;sinif metodu &quot;</span></div>
</li>
<li class="li1">
<div class="de1">ornek = Sinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">clmetod</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;sinif metodu &quot;</span></div>
</li>
</ol>
</div>
<p>classmethod descriptor&#8217;u ise şu şekilde:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> ClassMethod<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,f<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">f</span> = f</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__get__</span><span class="br0">&#40;</span><span class="kw2">self</span>,obj,objtype=<span class="kw2">None</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;obj-objtype&quot;</span>, obj,objtype</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> objtype <span class="kw1">is</span> <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; objtype = <span class="kw2">type</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> newfunc<span class="br0">&#40;</span>*args<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">f</span><span class="br0">&#40;</span>objtype,*args<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> newfunc</div>
</li>
</ol>
</div>
<h3>Method Resolution Order, Super</h3>
<p>Bir sınıfı tanımlarken bir veya birden çok sınıfı miras (inheritance) alarak tanımladığınızda sınıfa ait bir metodu çağırdığınız zaman aynı isime sahip metod taban sınıflarda (bases,superclass) yer alıyorsa çağrılmayacaktır. Örneğin:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> ASinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;A&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> BSinif<span class="br0">&#40;</span>ASinif<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;B&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = BSinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">ornek.<span class="me1">metod</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1"># cikti &quot;B&quot;</span></div>
</li>
</ol>
</div>
<p>Bu sorunu aşmak istediğiniz zaman kullandığınız genel yöntem şudur:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> ASinif<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;A&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> BSinif<span class="br0">&#40;</span>ASinif<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> metod<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ASinif.<span class="me1">metod</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;B&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">ornek = BSinif<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">metod</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="co1"># cikti &quot;A B&quot;</span></div>
</li>
</ol>
</div>
<p>Bu yöntem kimi zaman yeterli bir çözüm olabilir ancak işler biraz karışıp birden fazla sınıfı miras alarak çalıştığınızda şöyle bir sorunla karşılaşmanız olasıdır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> A<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;A&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> B<span class="br0">&#40;</span>A<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;B&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> C<span class="br0">&#40;</span>A<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;C&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> D<span class="br0">&#40;</span>B,C<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; B.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;D&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = D<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;A B A C D&quot;</span></div>
</li>
</ol>
</div>
<p>Bu örnekte olduğu gibi eğer super sınıflara (base) ait metodların sadece bir defa ve bir düzen içerisinde çağrılmasını istiyorsanız super()&#8217;de çareyi bulacaksınız. super()&#8217;i anlatmadan önce __mro__&#8217;dan bahsedelim.</p>
<p>__mro__, yeni stil sınıflarda sınıfın super sınıflarını bir tüp (tuple) içerisinde niteliktir. super(), super sınıflara ait metodları çağırırken __mro__ niteliğinden sıradaki sınıfı bulmak için yararlanır.</p>
<p>Örneğin yukarıda tanımladığımız D sınıfının __mro__&#8217;ı şu şekildedir:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&gt;&gt;&gt; D.__mro__</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">(&lt;class &#8216;__main__.D&#8217;&gt;, &lt;class &#8216;__main__.B&#8217;&gt;, &lt;class &#8216;__main__.C&#8217;&gt;, &lt;class &#8216;__main__.A&#8217;&gt;, &lt;type &#8216;object&#8217;&gt;)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
</ol>
</div>
<p>super() kullanılarak yapılan çağrılar, bu listeyi takip ederek yapılır. Şimdi üstteki örneği super() kullanarak tekrar yazalım.</p>
<p>super() kullanılırken, parametreler şu şekilde olmalı:<br />
super(type,obj) obj parametresi yani örnek, type ise örneği alınan sınıftır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> A<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;A&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> B<span class="br0">&#40;</span>A<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>B,<span class="kw2">self</span><span class="br0">&#41;</span>.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;B&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> C<span class="br0">&#40;</span>A<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>C,<span class="kw2">self</span><span class="br0">&#41;</span>.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;C&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> D<span class="br0">&#40;</span>B,C<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> yaz<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">super</span><span class="br0">&#40;</span>D,<span class="kw2">self</span><span class="br0">&#41;</span>.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;D&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">ornek = D<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">ornek.<span class="me1">yaz</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;A C B D&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#super cagrisina oncelik tanindigi icin boyle bir sonuc aliyoruz.</span></div>
</li>
</ol>
</div>
<h3>__new__</h3>
<p>Bir süper sınıfın alt sınıfı (yeni stil sınıflarda her sınıf object sınıfının bir alt sınıfıdır) örneklendirildiğinde sanıldığının aksine __init__ fonksiyonundan önce __new__ fonksiyonu çağrılır. __new__ fonksiyonu bir staticmethod olup, ilk parametresi sınıftır. __new__ fonksiyonu sınıf örneğini döndükten sonra __init__ fonksiyonu çalışır.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> inch<span class="br0">&#40;</span><span class="kw2">float</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__new__</span><span class="br0">&#40;</span>cls,arg=<span class="nu0">0.0</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">float</span>.<span class="kw4">__new__</span><span class="br0">&#40;</span>cls, arg*<span class="nu0">0.0254</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">inch<span class="br0">&#40;</span><span class="nu0">12</span><span class="br0">&#41;</span> <span class="co1">#cikti 3.048</span></div>
</li>
</ol>
</div>
<p>Descintro&#8217;da yer alan Singleton örneğini incelemek __new__ fonksiyonunu kavramak açısından yararlı olacak.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Singleton<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__new__</span><span class="br0">&#40;</span>cls,*args,**kargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it = cls.<span class="kw4">__dict__</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;__it__&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> it <span class="kw1">is</span> <span class="kw1">not</span> <span class="kw2">None</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> it</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cls.__it__ = it = <span class="kw2">object</span>.<span class="kw4">__new__</span><span class="br0">&#40;</span>cls<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it.<span class="me1">init</span><span class="br0">&#40;</span>*args,**kargs<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> it</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> init<span class="br0">&#40;</span><span class="kw2">self</span>,*args,**kargs<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">pass</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> MySingleton<span class="br0">&#40;</span>Singleton<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> init<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;init&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;__init__&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">orneka = MySingleton<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;init __init__&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ornekb = MySingleton<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="co1">#cikti &quot;__init__&quot;</span></div>
</li>
</ol>
</div>
<p>Bu örneği açıklamak gerekirse: orneka oluşturulduğunda MySingleton sınıfının süper sınıfı Singleton&#8217;un __new__ metodu çağrılıyor. __new__ metoduna giden ilk parametre &#8220;MySingleton&#8221; sınıfı oluyor. MySingleton sınıfının nitelik sözlüğü __dict__&#8217;e bakılarak __it__ sınıf örneği ile tanımlanmışsa it değişkenine atanıp döndürülüyor, bu durumda MySingleton sınıfının sadece __init__ metodunun çağrılmasına sebep oluyor. Ancak burada MySingleton sınıfı henüz yeni örneklendirilmiş olduğu için __it__ tanımlanmamış, bu durumda &#8220;cls.__it__ = it = object.__new__(cls)&#8221; satırı çalışmaya başlıyor ve MySingleton sınıfı kendisinin __it__ niteliği ve Singleton sınıfının it değişkeni ile örneklendiriliyor. &#8220;it.init(*args, **kargs)&#8221; satırında gördüğünüz gibi MySingleton sınıfı örneğinin init metodu çağrılıyor. Ardına örnek döndürülüyor, __new__ metodunun görevi bitmiş olduğundan dolayı örneğin __init__ metodu çağrılmış oluyor. Bu nedenle &#8220;init __init__&#8221; çıktısını almış oluyoruz.</p>
<p>ornekb oluşturulduğunda tekrar Singleton sınıfının __new__ metodu çağrılıyor. Bu sefer MySingleton sınıfında __it__ niteliği sınıf örneği ile tanımlı olduğundan dolayı __new__ metodu  bu tanımlı örneği dönüyor, bu sebepten dolayı sadece __init__ metodu çağrılmış oluyor ve &#8220;__init__&#8221; çıktısını alıyoruz.</p>
<p>Bu koca dökümanı geride bırakırken&#8230;<br />
Bahsetmek isteyip de yazamadığım __metaclass__ konusu bir sonraki yazıda gelecek. Sonuçta burda yazdıklarımı ben de yazarken öğrendim ve __metaclass__ konusu son derece önemli bir konu. Şu sıralar küçük bir sağlık problemi yaşadığımdan dolayı fazla açıklamalarda bulunamadım, çoğunu özet geçmek zorunda kaldım. Bu nedenle aşağıda vereceğim kaynakları okumanızda yarar var.</p>
<p><a href="http://www.python.org/download/releases/2.2.3/descrintro/" target="_blank">descintro</a><br />
<a href="http://www.cafepy.com/article/python_types_and_objects/"> Descriptor HowTo Guide</a><br />
<a href="http://docs.python.org/reference/index.html"> Python Language Referance</a><br />
<a href="http://realmike.org/python/new_style_classes.htm?SBTDTDE=HYAWKZK"> Introduction to New-Style Classes In Python &#8211; Micheal Fötsch</a><br />
<a href="http://www.cafepy.com/article/python_attributes_and_methods/"> Python Attributes and Methods &#8211; Shalabh Chaturvedi</a><br />
<a href="http://www.cafepy.com/article/python_types_and_objects/"> Python Types and Objects &#8211; Shalabh Chaturvedi</a></p>
<p><em>Ayrıca;<br />
Bu blog&#8217;da yer alan Genel Kamu Lisansına (GPL, hepsi v3) sahip uygulamalar haricinde herhangi bir içerik herhangi bir lisans kapsamında değildir. İstenildiği gibi alınıp, kenarından köşesinden çırpılıp kullanılabilir. Kaynak gösterilmeden kullanılması bir nebze de olsa umrumda değildir. Burada tüm yazdıklarımı öğrenirken öğretmek amaçlı yazdığım için hatalar olabilir, kaynak göstermeden kullandığınız durumda ihale size kalır.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/sinif-ozellikleri-ve-yeni-stil-siniflar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iContacts1.6 &#8220;ic.lnx&#8221;</title>
		<link>http://www.brsyuksel.com/icontacts1-6-ic-lnx.html</link>
		<comments>http://www.brsyuksel.com/icontacts1-6-ic-lnx.html#comments</comments>
		<pubDate>Mon, 14 Jun 2010 00:16:57 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[icontacts]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=93</guid>
		<description><![CDATA[Merhabalar. Plansız, programsız ve sorumsuzca bir çalışmanın ardından iContacts&#8217;ın linux sürümünü tamamlayabildim. 28 Kasım tarihli şu yazımda çalışmalara yakın zamanda başlayacağımı söylemiştim ve gerek okul, gerek başka uygulamalar, gerekse iContacts&#8217;ı defalarca sil-baştan yapmış olmamdan dolayı uygulamayı ancak bugün tam anlamıyla hazır hale getirebildim. O yazıda da bahsettiğim gibi, iContacts benim için sıkı bir pygtk çalışması [...]]]></description>
			<content:encoded><![CDATA[<p>Merhabalar. Plansız, programsız ve sorumsuzca bir çalışmanın ardından iContacts&#8217;ın linux sürümünü tamamlayabildim. 28 Kasım tarihli <a href="http://www.brsyuksel.com/ileri-c-programcisi-son-durum.html" target="_blank">şu yazımda</a> çalışmalara yakın zamanda başlayacağımı söylemiştim ve gerek okul, gerek başka uygulamalar, gerekse iContacts&#8217;ı defalarca sil-baştan yapmış olmamdan dolayı uygulamayı ancak bugün tam anlamıyla hazır hale getirebildim.</p>
<p><span id="more-93"></span>O yazıda da bahsettiğim gibi, iContacts benim için sıkı bir pygtk çalışması oldu. iContacts&#8217;ı tasarlamadan önce aklımdan &#8220;MVCvari&#8221; bir yapı tasarlayıp uygulamak geçiyordu ve bunu henüz istediğim şekilde olmasa da kısmen iContacts&#8217;ta uygulayabildim. İşimi gerçekten çok kolaylaştırıp çok daha hızlandırdı. Twittell&#8217;in GUI&#8217;sini programlarken yüzlerce satır arasında aradığımı bulamamak benim sabrımı bayağı bir zorlamış olduğu için Twittell&#8217;a ara vermek zorunda kalmıştım. iContacts&#8217;ta denediğim bu yapı ile Twittell&#8217;a kısa bir süre içerisinde dönüş yapmayı planlıyorum ancak yapı üzerinde çok daha fazla geliştirme yapıp o şekilde Twittell&#8217;a uygulamak istiyorum.</p>
<p>Şu anda iContacts&#8217;ın kullanışlılıkla ilgili sorunları bulunmasa da uygulama amaç doğrultusunda yetersiz kalıyor. Kendimi altyapıya odakladığım için bu sorunları şimdilik es geçmek zorunda kaldım. iContacts&#8217;ın yeni sürümünü hazırlamadan önce Python&#8217;un sınıf özelliklerini tam anlamıyla öğrenmek ve tasarım desenleri hakkında yeterli bilgiye sahip olmak için biraz çalışmam gerekiyor. Bu eksiğimi de tamamladıktan sonra iContacts&#8217;ın yeni sürümü için çalışmalara başlayabilirim.</p>
<p><strong>iContacts Ekran Görüntüsü<br />
<a href="http://www.brsyuksel.com/wp-content/uploads/iContacts.png"><img class="alignleft size-medium wp-image-94" title="iContacts" src="http://www.brsyuksel.com/wp-content/uploads/iContacts-300x184.png" alt="" width="300" height="184" /></a></strong></p>
<p><strong>iContacts Kaynak Kodu:<br />
<span style="font-weight: normal;"><a href="http://brsyuksel.com/iclnx/iContacts1.6-lnx0.1.tar.gz" target="_blank">iContacts1.6-lnx0.1.tar.gz</a></span></strong></p>
<p><strong><span style="font-weight: normal;"><a href="http://brsyuksel.com/iclnx/iContacts1.6-lnx0.1.tar.gz" target="_blank"></a></span>iContacts Deb Paketi:<br />
<span style="font-weight: normal;"><a href="http://brsyuksel.com/iclnx/iContacts1.6-lnx0.1.deb">iContacts1.6-lnx0.1.deb</a></span> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/icontacts1-6-ic-lnx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İlk C Uygulamam: Kelime Tahmin</title>
		<link>http://www.brsyuksel.com/ilk-c-uygulamam-kelime-tahmin.html</link>
		<comments>http://www.brsyuksel.com/ilk-c-uygulamam-kelime-tahmin.html#comments</comments>
		<pubDate>Tue, 04 May 2010 23:06:38 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[kelime tahmin]]></category>
		<category><![CDATA[memory leak]]></category>
		<category><![CDATA[wchar]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=86</guid>
		<description><![CDATA[Uzun bir aradan sonra tekrar merhaba. Bu süre içerisinde C çalıştığımı ya da üzerinde çalıştığım uygulamalarla vakit geçirdiğimi sanıyorsanız, yanılıyorsunuz; yatıyordum. Bilgisayar Mühendisliği öğrencisi olan bir arkadaşımın Veri Yapıları ve Algoritmalar dersi için 2.vize ödevi olan kelime tahmin uygulamasını yaptım. C dilinde kayda değer ilk uygulamam olduğundan dolayı yayınlayıp eleştiri almayı beklemek sanırım en doğrusu [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">
<div id="_mcePaste">Uzun bir aradan sonra tekrar merhaba. Bu süre içerisinde C çalıştığımı ya da üzerinde çalıştığım uygulamalarla vakit geçirdiğimi sanıyorsanız, yanılıyorsunuz; yatıyordum.</div>
<div id="_mcePaste"><span id="more-86"></span></div>
<div id="_mcePaste">Bilgisayar Mühendisliği öğrencisi olan bir arkadaşımın Veri Yapıları ve Algoritmalar dersi için 2.vize ödevi olan kelime tahmin uygulamasını yaptım. C dilinde kayda değer ilk uygulamam olduğundan dolayı yayınlayıp eleştiri almayı beklemek sanırım en doğrusu olacak.</div>
<p>Uygulama içerisinde 18000 küsür kelime barından txt dosyasını okuyarak istenilen şekilde bir sözlük oluşturuyor ve size rastgele kelimeler gönderip benzerlik değerini girmenizi istiyor. Bu benzerlik değerlerinden yola çıkarak aklınızdaki kelimeyi tahmin etmeye çalışıyor. Algoritması gayet basit, sözlükteki her kelimeleri birbirleriyle karşılaştırıp sonucu bir matrise atıyor ve benzerlik değeri girildikçe matris kontrol ediliyor, ardına girilen benzerlik değeri aynı olmayan sözcükler sözlükten siliniyor. Anagram kelimelere ( bkz: ayak, kaya, yaka )  ulaşılana kadar bu işlem devam ediyor.</p>
<div id="_mcePaste">Uygulama bana bir çok şey öğretti: Dinamik Bellek Yönetimi, wchar.h, GDB, Makefile</div>
<p>Son olarak, sanırım bu uygulamada ben &#8220;memory leak&#8221; e sebep olan bir hata yaptım ya da &#8220;stringler uygulama sonlanıncaya kadar bellekte kalırlar&#8221; diyerek kendimi avutmalıyım ama integer&#8217;lar için de aynı sorun söz konusu. Bu konuda yorumlarınızla bana yanlışımı gösterirseniz çok sevinirim.</p>
<p>Yeter, <a href="http://brsyuksel.com/wp-content/uploads/kelimetahmin.c.tar.gz" target="_blank">kelimetahmin.c.tar.gz</a></p>
<p><strong>Konsolda &#8220;make install&#8221; komutunu vermeden önce sozluk.c dosyasında 10.satırı ve Makefile dosyasında 3.satırı kendinize göre düzenleyin. Automake Barış, automake&#8230; </strong></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/ilk-c-uygulamam-kelime-tahmin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysqli.so-2.php</title>
		<link>http://www.brsyuksel.com/mysqli-so-2-php.html</link>
		<comments>http://www.brsyuksel.com/mysqli-so-2-php.html#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:45:10 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysqli]]></category>
		<category><![CDATA[php5]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=73</guid>
		<description><![CDATA[Bu Trabzon&#8217;da yapacak birşey bulamazsınız, böyle benim gibi yaklaşık 1.5 yıldır herhangi bir şekilde uğraşmadığınız dille vakit geçirmeye başlarsınız. Can sıkıntısından ötürü olsa gerek, bir anlık esintiyle PHP&#8217;yi tekrar işin içine sokmak istedim. Bir daha ister miyim? İstemem. Zamanında yapıp yayınladığım, tekrar dönüp bakınca &#8220;Bu nasıl olmuş da 2. seçilmiş?&#8221; dediğim mysqli.so.php&#8217;yi geliştirdim, geliştirirken de [...]]]></description>
			<content:encoded><![CDATA[<p>Bu Trabzon&#8217;da yapacak birşey bulamazsınız, böyle benim gibi yaklaşık 1.5 yıldır herhangi bir şekilde uğraşmadığınız dille vakit geçirmeye başlarsınız. Can sıkıntısından ötürü olsa gerek, bir anlık esintiyle PHP&#8217;yi tekrar işin içine sokmak istedim. Bir daha ister miyim? İstemem.<br />
<span id="more-73"></span><br />
Zamanında yapıp yayınladığım, tekrar dönüp bakınca &#8220;Bu nasıl olmuş da 2. seçilmiş?&#8221; dediğim mysqli.so.php&#8217;yi geliştirdim, geliştirirken de __call(), __callStatic(), __get(), __set(), gibi &#8220;Sihirli Yöntemler&#8221; kullanarak biraz eğlendim. Ortaya çorba misali bir koda sahip mysqli.so-2.php çıktı.</p>
<p>mysqli.so-2.php</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> mysqli<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$data</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$pre</span>=<span class="st0">&quot;mysql_&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; const MYSQLI_BOTH=<span class="st0">&quot;MYSQL_BOTH&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; const MYSQLI_NUM=<span class="st0">&quot;MYSQL_NUM&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; const MYSQLI_ASSOC=<span class="st0">&quot;MYSQL_ASSOC&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="re0">$finfo</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;thread_id&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;insert_id&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;error&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;errno&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;affected_rows&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;num_rows&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;lengths&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="kw2">NULL</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;query&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;array_push&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;this&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;select_db&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;dbase&quot;</span>,<span class="st0">&quot;array_push&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fetch_assoc&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fetch_array&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fetch_row&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fetch_object&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;fetch_field&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;data_seek&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;field_seek&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;free_result&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;result&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;get_client_info&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="kw2">NULL</span>,<span class="kw2">NULL</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">TRUE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;ping&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;change_user&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_push&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;real_escape_string&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_push&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;set_charset&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_push&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;stat&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;close&quot;</span> =&gt; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="kw2">NULL</span>,<span class="st0">&quot;array_unshift&quot;</span>,<span class="st0">&quot;mysql&quot;</span>,<span class="st0">&quot;function&quot;</span>,<span class="kw2">FALSE</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re0">$host</span>,<span class="re0">$username</span>,<span class="re0">$passwd</span>,<span class="re0">$dbname</span>=<span class="kw2">NULL</span>,<span class="re0">$port</span>=<span class="kw2">NULL</span>,<span class="re0">$socket</span>=<span class="kw2">NULL</span><span class="br0">&#41;</span><span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$conn_addr</span>=<span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$host</span><span class="br0">&#41;</span><span class="br0">&#41;</span>?<span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$port</span><span class="br0">&#41;</span><span class="br0">&#41;</span>?<span class="re0">$host</span>.<span class="st0">&quot;:&quot;</span>.<span class="re0">$port</span>:<span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="br0">&#41;</span>?<span class="re0">$host</span>.<span class="st0">&quot;:&quot;</span>.<span class="re0">$socket</span>:<span class="re0">$host</span><span class="br0">&#41;</span><span class="br0">&#41;</span>:<span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$socket</span><span class="br0">&#41;</span><span class="br0">&#41;</span>?<span class="st0">&quot;:&quot;</span>.<span class="re0">$socket</span>:<span class="kw2">NULL</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="st0">&quot;mysql&quot;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$conn_addr</span>,<span class="re0">$username</span>,<span class="re0">$passwd</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$dbname</span>!=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="st0">&quot;dbase&quot;</span><span class="br0">&#93;</span>=<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$dbname</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch<span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$e</span>-&gt;<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __call<span class="br0">&#40;</span><span class="re0">$func</span>,<span class="re0">$arg</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/array_key_exists"><span class="kw3">array_key_exists</span></a><span class="br0">&#40;</span><span class="re0">$func</span>,<span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#41;</span> &amp;&amp; <a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">pre</span>.<span class="re0">$func</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp;&amp; <a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#40;</span><span class="re0">$arg</span>,<span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>==<span class="st0">&quot;function&quot;</span> || !<a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <a href="http://www.php.net/call_user_func_array"><span class="kw3">call_user_func_array</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">pre</span>.<span class="re0">$func</span>,<span class="re0">$arg</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">elseif</span><span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span> &amp;&amp; <a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self::__set<span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>,<a href="http://www.php.net/call_user_func_array"><span class="kw3">call_user_func_array</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">pre</span>.<span class="re0">$func</span>,<span class="re0">$arg</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$this</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch<span class="br0">&#40;</span>Exception <span class="re0">$e</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="re0">$e</span>-&gt;<span class="me1">getMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __callStatic<span class="br0">&#40;</span><span class="re0">$func</span>,<span class="re0">$arg</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$func</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? self::__call<span class="br0">&#40;</span><span class="re0">$func</span>,<span class="re0">$arg</span><span class="br0">&#41;</span> : <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __get<span class="br0">&#40;</span><span class="re0">$property</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#91;</span><span class="re0">$property</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ? self::__call<span class="br0">&#40;</span><span class="re0">$property</span>,<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> : <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> __set<span class="br0">&#40;</span><span class="re0">$property</span>,<span class="re0">$value</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/array_key_exists"><span class="kw3">array_key_exists</span></a><span class="br0">&#40;</span><span class="re0">$property</span>,<span class="re0">$this</span>-&gt;<span class="me1">finfo</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">data</span><span class="br0">&#91;</span><span class="re0">$property</span><span class="br0">&#93;</span> = <span class="re0">$value</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Şöyle bir inc_mysqli.php dosyası hazırlandıktan sonra:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/extension_loaded"><span class="kw3">extension_loaded</span></a><span class="br0">&#40;</span><span class="st0">&quot;mysqli&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">require_once</span> <span class="st0">&#8216;mysqli.so-2.php&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>.htaccess dosyanıza şöyle bir satır ekleyerek mysqli.so-2.php&#8217;yi rahatlıkla kullanabilirsiniz.<br />
<strong>php_value auto_prepend_file /dosya/yolu/inc_mysqli.php</strong></p>
<p>PHP defterini bir kez daha kapatırken söylemek istediğim şeyler varsa onlar da şunlardır:<br />
1 &#8211; En başarılı kod, en okunaklı koddur. Bakınız: Satır 39. Aslında, Satır Hepsi(!)<br />
2 &#8211; Python&#8217;a &#8220;Merhaba&#8221; derken PHP&#8217;ye &#8220;Elveda&#8221; dediysen, giderken dönüp ardına bakmamalısın.<br />
3 &#8211; Olur da işin düşer PHP&#8217;de birşeyler yazman gerekirse, baştan kabul edeceğin şey acı çekeceğin olmalıdır.</p>
<p><a href="http://brsyuksel.com/wp-content/uploads/mysqli.so-2.php.tar.gz"><br />
mysqli.so-2.php&#8217;yi indirmek için tıklayın.</a></p>
<h6><strong>*Eminim Manuel Lemos beni takip ediyordur.</strong></h6>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/mysqli-so-2-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>İleri C Programcısı, Son Durum</title>
		<link>http://www.brsyuksel.com/ileri-c-programcisi-son-durum.html</link>
		<comments>http://www.brsyuksel.com/ileri-c-programcisi-son-durum.html#comments</comments>
		<pubDate>Sat, 28 Nov 2009 03:18:35 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[ic.lnx]]></category>
		<category><![CDATA[icontacts]]></category>
		<category><![CDATA[ileri c programlama]]></category>
		<category><![CDATA[twittell]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=70</guid>
		<description><![CDATA[Merhaba. Blogumda elimden geldiğince, herhangi bir şekilde bilgi paylaşımı bulunmayan yazı yazmamaya gayret ediyordum. Ancak bir kez olsun, böyle bir ihmalin güzel olacağını düşündüm. Başlıkta da gördüğünüz gibi artık ileri C programcısıyım! Evet, iddia ediyorum. Nerden çıktı bu diyeceksiniz? Şöyle ki, Trabzon&#8217;daki bir arkadaşımdan C programlama için bir kitap istedim. Sağ olsun, o da beni [...]]]></description>
			<content:encoded><![CDATA[<p>Merhaba. Blogumda elimden geldiğince, herhangi bir şekilde bilgi paylaşımı bulunmayan yazı yazmamaya gayret ediyordum. Ancak bir kez olsun, böyle bir ihmalin güzel olacağını düşündüm.<br />
<span id="more-70"></span><br />
Başlıkta da gördüğünüz gibi artık ileri C programcısıyım! Evet, iddia ediyorum. Nerden çıktı bu diyeceksiniz? Şöyle ki, Trabzon&#8217;daki bir arkadaşımdan C programlama için bir kitap istedim. Sağ olsun, o da beni kırmayarak G. Murat Taşbaşı&#8217;nın yazmış olduğu &#8220;<a href="http://www.idefix.com/kitap/ileri-c-programlama-g-murat-tasbasi/tanim.asp?sid=QF5XXG3GB0VC55ZY2TOP">İleri C Programlama</a>&#8221; adında bir kitap getirdi. Süper zeka olduğumu iddia ettiğimden değil ( aslında G.M. Taşbaşı&#8217;nın desteği ile bunu da iddia edebilirim ), kitabı 4 gün gibi kısa bir sürede bitirdim. Turbo C&#8217;nin grafik fonksiyonları beni bağlamadığından kendileriyle ilgilenmedim. &#8220;Şimdi ben ileri C Programcısı mıyım?&#8221; sorusuyla birlikte araştırınca, sizeof&#8217;u bilmediğimi, typedef&#8217;in öğretilmediğini, union&#8217;dan, enumdan hiç bahsedilmediğini, Dinamik Bellek Yönetimi&#8217;yle haşır-neşir olamadığımı ve bunun gibi bir çok teknik konudan habersiz olduğumu fark ettim. Öyle demeyin, ben ileri C programcısıyım. </p>
<p>Eğer siz de benim gibi ileri C programcısı olamadığınızı hissediyorsanız, Kaan Aslan&#8217;ın A&#8217;dan Z&#8217;ye C kitabını almak için çabalayın, Necati Ergin&#8217;in C Ders Notları isimli PDF&#8217;sini bulun ( sanırım bunu basılmış olarak <a href="http://www.csystem.org">csystem.org</a>&#8216;dan temin edebiliyormuşuz, öylesi daha iyi ), üniversitenizin ya da bulunduğunuz şehrin kütüphanesinden adını daha önce duymamış olduğunuz bir çok C kitaplarını alın. </p>
<p>Başka, Cerem&#8217;in <a href="http://www.gravideo.net/icontacts/tr/">iContacts</a> isimli uygulamasının Linux versiyonunu yapacağıma dair söz vermiştim, yakın zamanda başlarım. Benim için iyi bir PyGTK çalışması olacak. </p>
<p>Adı batasıca Twittell&#8217;ın GUI&#8217;sini sil-baştan yapmaya karar verdim, olmaz öyle birbirine girmiş 500-600 satırla bu iş. Daha modüler bir şekilde kodlamalıyım onu. Daha düzenli olmalı. </p>
<p>Başka da birşey yok.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/ileri-c-programcisi-son-durum.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
