<?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 &#187; Python</title>
	<atom:link href="http://www.brsyuksel.com/category/python/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>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>Get a Nurse!</title>
		<link>http://www.brsyuksel.com/get-a-nurse.html</link>
		<comments>http://www.brsyuksel.com/get-a-nurse.html#comments</comments>
		<pubDate>Sat, 31 Oct 2009 09:48:28 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[bele kuvvet]]></category>
		<category><![CDATA[brute-force]]></category>
		<category><![CDATA[getanurse]]></category>
		<category><![CDATA[kaba kuvvet]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=66</guid>
		<description><![CDATA[Trabzon&#8217;dayken gereksizliğimin en üst seviyeye çıkmasından ötürü ortaya koyduğum kaba kuvvet ( brute-force ) uygulamasını paylaşmak istedim. Kullanıcı adı bilinen geleneksel yetkilendirme ( basic authorization ) şifresini deneme-yanılma ile bulmayı amaçlayan bu uygulama, herhangi bir işinize yaramaz, peygamber sabrına sahip değilseniz asla olumlu sonuç vermez, sizi hacker/lamer/programcı vs. yapmaz fakat söylediğim gibi sabrınızı güzel bir [...]]]></description>
			<content:encoded><![CDATA[<p>Trabzon&#8217;dayken gereksizliğimin en üst seviyeye çıkmasından ötürü ortaya koyduğum kaba kuvvet ( brute-force ) uygulamasını paylaşmak istedim. Kullanıcı adı bilinen geleneksel yetkilendirme ( basic authorization ) şifresini deneme-yanılma ile bulmayı amaçlayan bu uygulama, herhangi bir işinize yaramaz, peygamber sabrına sahip değilseniz asla olumlu sonuç vermez, sizi hacker/lamer/programcı vs. yapmaz fakat söylediğim gibi sabrınızı güzel bir şekilde sınayabilir.<br />
<span id="more-66"></span><br />
GetaNurse:</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">#halt yemis brute-forcer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#neden paylastim az da ben bilsem</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">urllib2</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">time</span>,<span class="kw3">os</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">from</span> <span class="kw3">httplib</span> <span class="kw1">import</span> BadStatusLine</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">cPickle</span> as <span class="kw3">pickle</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> GetaNurse:</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">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>,addr,usr=<span class="st0">&quot;&quot;</span>,<span class="kw2">min</span>=<span class="nu0">4</span>,<span class="kw2">max</span>=<span class="nu0">16</span>,breath=<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">chars</span> = <span class="kw2">unicode</span><span class="br0">&#40;</span><span class="st0">&quot;0123456789aAbBcCçÇdDeEfFgGğĞhHıIiİjJkKlLmMnNoOöÖpPrRsSşŞtTuUüÜvVyYzZwWxXqQ.-_/&quot;</span>,<span class="st0">&quot;utf8&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">usr</span> = usr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">addr</span> = addr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw2">min</span> = <span class="kw2">min</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw2">max</span> = <span class="kw2">max</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">breath</span> = breath</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">passwd</span> = <span class="st0">&quot;&quot;</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">counter</span> = <span class="br0">&#91;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</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="kw2">self</span>.<span class="kw2">min</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="kw2">self</span>.<span class="me1">counter</span>.<span class="me1">append</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getdir = <span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">dirname</span><span class="br0">&#40;</span>__file__<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="kw3">os</span>.<span class="me1">path</span>.<span class="me1">isfile</span><span class="br0">&#40;</span>getdir+<span class="st0">&quot;/.dataforgan.txt&quot;</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; f = <span class="kw2">open</span><span class="br0">&#40;</span>getdir+<span class="st0">&quot;/.dataforgan.txt&quot;</span>,<span class="st0">&quot;rb&quot;</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; counter = <span class="kw3">pickle</span>.<span class="me1">load</span><span class="br0">&#40;</span>f<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; f.<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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> counter<span class="br0">&#91;</span><span class="nu0">-1</span><span class="br0">&#93;</span> != <span class="nu0">0</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; counter<span class="br0">&#91;</span><span class="nu0">-1</span><span class="br0">&#93;</span> -= <span class="nu0">1</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; counter<span class="br0">&#91;</span><span class="nu0">-1</span><span class="br0">&#93;</span> = <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">chars</span><span class="br0">&#41;</span> &#8211; <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">counter</span> = counter</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> count<span class="br0">&#40;</span><span class="kw2">self</span>,i,limit<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> i &lt; <span class="nu0">0</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="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span> &gt; <span class="nu0">0</span> <span class="kw1">and</span> <span class="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span> % limit == <span class="nu0">0</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="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span> = <span class="nu0">0</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="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#91;</span>i<span class="nu0">-1</span><span class="br0">&#93;</span> += <span class="nu0">1</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="kw2">self</span>.<span class="me1">count</span><span class="br0">&#40;</span>i<span class="nu0">-1</span>,limit<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">for</span> a <span class="kw1">in</span> <span class="kw2">self</span>.<span class="me1">counter</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b = b + a</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> b == <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">if</span> <span class="kw1">not</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#41;</span> &gt; <span class="kw2">self</span>.<span class="kw2">max</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="kw2">self</span>.<span class="me1">counter</span>.<span class="me1">append</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; &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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">raise</span> <span class="kw2">IOError</span><span class="br0">&#40;</span><span class="st0">&quot;I&#8217;m sorry, dude.&quot;</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">def</span> force<span class="br0">&#40;</span><span class="kw2">self</span>,passwd<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">passwd</span> = passwd</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handler = <span class="kw3">urllib2</span>.<span class="me1">HTTPBasicAuthHandler</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; handler.<span class="me1">add_password</span><span class="br0">&#40;</span>realm=<span class="kw2">self</span>.<span class="me1">addr</span>,uri=<span class="kw2">self</span>.<span class="me1">addr</span>,<span class="kw3">user</span>=<span class="kw2">self</span>.<span class="me1">usr</span>,passwd=<span class="kw2">self</span>.<span class="me1">passwd</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; urlopener = <span class="kw3">urllib2</span>.<span class="me1">build_opener</span><span class="br0">&#40;</span>handler<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">urllib2</span>.<span class="me1">install_opener</span><span class="br0">&#40;</span>urlopener<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">urllib2</span>.<span class="me1">urlopen</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">addr</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">def</span> create<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; passwd = <span class="st0">&quot;&quot;</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">self</span>.<span class="me1">counter</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; passwd = passwd + <span class="kw2">self</span>.<span class="me1">chars</span><span class="br0">&#91;</span>i<span class="br0">&#93;</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">counter</span><span class="br0">&#91;</span><span class="nu0">-1</span><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="kw2">self</span>.<span class="me1">count</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">counter</span><span class="br0">&#41;</span><span class="nu0">-1</span>,<span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">chars</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; <span class="kw1">return</span> passwd</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> run<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&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="kw2">self</span>.<span class="me1">force</span><span class="br0">&#40;</span>passwd = <span class="kw2">self</span>.<span class="me1">create</span><span class="br0">&#40;</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; <span class="kw1">except</span> <span class="kw2">IOError</span>,e:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">hasattr</span><span class="br0">&#40;</span>e,<span class="st0">&quot;code&quot;</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="kw1">if</span> e.<span class="kw3">code</span> != <span class="nu0">401</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">print</span> e.<span class="kw3">code</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">print</span> <span class="st0">&quot;%s:basic authorization?&quot;</span> % <span class="kw2">self</span>.<span class="me1">addr</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">else</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;%s:%s &#8212; negative&quot;</span> % <span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">usr</span>,<span class="kw2">self</span>.<span class="me1">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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">self</span>.<span class="me1">breath</span> != <span class="nu0">0</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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">breath</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="kw2">self</span>.<span class="me1">run</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">except</span> BadStatusLine:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getdir = <span class="kw3">os</span>.<span class="me1">path</span>.<span class="me1">dirname</span><span class="br0">&#40;</span>__file__<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; f = <span class="kw2">open</span><span class="br0">&#40;</span>getdir+<span class="st0">&quot;/.dataforgan.txt&quot;</span>,<span class="st0">&quot;wb&quot;</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="kw3">pickle</span>.<span class="me1">dump</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">counter</span>,f<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; f.<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; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">print</span> <span class="st0">&quot;BadStatusLine error.Restart GetaNurse.&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">print</span> <span class="st0">&quot;<span class="es0">\a</span>&quot;</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;%s:%s &#8212; pozitive&quot;</span> % <span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">usr</span>,<span class="kw2">self</span>.<span class="me1">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">print</span> <span class="st0">&quot;that<span class="es0">\&#8217;</span>s all.mission completed.see you&#8230;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">x = GetaNurse<span class="br0">&#40;</span>usr=<span class="st0">&quot;username&quot;</span>,addr=<span class="st0">&quot;http://10.0.0.1&quot;</span>,breath=<span class="nu0">0.1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> <span class="st0">&quot;Wellcome to your new game. Good Luck!<span class="es0">\n</span>GetaNurse&#8230;<span class="es0">\n</span><span class="es0">\n</span><span class="es0">\n</span><span class="es0">\n</span><span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li1">
<div class="de1">x.<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Ne yapacaksınız? Uygulamanın sadece 4 haneli şifre denemelerini bitirme süresinin 42 gün olduğunu hesaplayacak, hemen uygulamayı sonlandıracaksınız. Teşekkürler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/get-a-nurse.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kısaca PyNotify</title>
		<link>http://www.brsyuksel.com/kisaca-pynotify.html</link>
		<comments>http://www.brsyuksel.com/kisaca-pynotify.html#comments</comments>
		<pubDate>Sat, 26 Sep 2009 22:35:11 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[libnotify]]></category>
		<category><![CDATA[pynotify]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=56</guid>
		<description><![CDATA[Trabzon&#8217;a gelmeden önce &#8220;adını sürekli anıp kendisini bir türlü göremediğimiz Twittell&#8221; için anlık twit&#8217;ler ( ya da tweet&#8217;ler ) takip edilebilsin diye bir &#8220;Baloncuk Mesajı&#8221; nasıl veririm diye araştırıyordum. Bir süre sonra canıma tak edince gtk&#8217;nın bir adet 350&#215;100 ebatlarında Pop-up penceresini olduğu gibi sağ tarafa dayayarak &#8220;kullanan az da kıllansın&#8221; dedim. Bunun bir &#8220;amele [...]]]></description>
			<content:encoded><![CDATA[<p>Trabzon&#8217;a gelmeden önce &#8220;adını sürekli anıp kendisini bir türlü göremediğimiz Twittell&#8221; için anlık twit&#8217;ler ( ya da tweet&#8217;ler ) takip edilebilsin diye bir &#8220;Baloncuk Mesajı&#8221; nasıl veririm diye araştırıyordum. Bir süre sonra canıma tak edince gtk&#8217;nın bir adet 350&#215;100 ebatlarında Pop-up penceresini olduğu gibi sağ tarafa dayayarak &#8220;kullanan az da kıllansın&#8221; dedim. Bunun bir &#8220;amele yöntemi&#8221; olduğunu bilmeme ve hiç içime sinmemesine rağmen, o &#8220;ucuz&#8221; pencere için <a href="http://twitter.com/evotik">Cerem</a>&#8216;de saatlerce grafikler tasarladı ama&#8230;<br />
<span id="more-56"></span><br />
O süreç içerisinde DBUS&#8217;ın ne olup ne olmadığını karıştırırken, network manager, pidgin vs. uygulamaların verdiği mesajların hep aynı yapıda olması dikkatimi çekti ve o baloncuk mesajlarının ( Desktop Notification ) gnome&#8217;un DBUS&#8217;ını kullanarak verildiğini fark ettim.</p>
<p>gnome&#8217;un DBUS&#8217;ını kullanarak o mesajları vermek haddime değil gibi durduktan sonra, kısa bir google araştırmasıyla pynotify&#8217;yi tanıdım. PyNotify, libnotify&#8217;nin gnome&#8217;un DBUS&#8217;ını kullanmasını kullanarak ( <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) baloncuk mesajlar vermenizi sağlayan bir modül. Kendisinin kullanımı şu şekilde:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">import</span> pynotify</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">pynotify.<span class="me1">init</span><span class="br0">&#40;</span><span class="st0">&quot;PyNotify&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">notify = pynotify.<span class="me1">Notification</span><span class="br0">&#40;</span><span class="st0">&quot;Deneme&quot;</span>,<span class="st0">&quot;deneme bildirim&quot;</span>,<span class="st0">&quot;/resim/dosya.png&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">notify.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Kendisinin verdiği sonuç ise şöyle:<br />
<a href="http://www.brsyuksel.com/wp-content/uploads/dnm.png"><img class="alignleft size-medium wp-image-57" title="pynotify" src="http://www.brsyuksel.com/wp-content/uploads/dnm-300x81.png" alt="pynotify" width="300" height="81" /></a></p>
<p>Bu arada ilerleyen zamanlarda pidgin DBUS&#8217;ını kullanan bir uygulama yapmayı planlıyorum. İyice öğrenmeliyim bunu.Farkettim, yazıda pynotify&#8217;den çok DBUS&#8217;ın sözü geçti <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h6>*4 satırlık kod üzerine bir insan evladı anca bu kadar yazabilir.</h6>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/kisaca-pynotify.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OAuth</title>
		<link>http://www.brsyuksel.com/oauth.html</link>
		<comments>http://www.brsyuksel.com/oauth.html#comments</comments>
		<pubDate>Sat, 05 Sep 2009 23:35:13 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[TwittellOAuth]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=47</guid>
		<description><![CDATA[Şu sıralar her ne kadar boyumdan büyük bir iş olsa da, Twittell gibi hoş bir isim verdiğim, Linux için Twitter istemcisi olacak bir uygulama üzerinde çalışıyorum. Aslında çalışıyorum demem doğru olmaz çünkü üniversite kayıt işlemleri 2 haftamı aldı götürdü diyebilirim. Herneyse&#8230; Şimdi basit bir örnek vererek OAuth&#8217;a değineyim. Farz edin ki, Twitter.com, FriendFeed.com gibi servisler [...]]]></description>
			<content:encoded><![CDATA[<p>Şu sıralar her ne kadar boyumdan büyük bir iş olsa da, Twittell gibi hoş bir isim verdiğim, Linux için Twitter istemcisi olacak bir uygulama üzerinde çalışıyorum. Aslında çalışıyorum demem doğru olmaz çünkü üniversite kayıt işlemleri 2 haftamı aldı götürdü diyebilirim. Herneyse&#8230;</p>
<p>Şimdi basit bir örnek vererek OAuth&#8217;a değineyim. Farz edin ki, Twitter.com, FriendFeed.com gibi servisler için bir istemci uygulaması yaptınız. Son kullanıcı uygulamanıza kullanıcı adını ve şifresini girerek geleneksel yetkilendirme ( basic authorization ) yapılıyor ve API&#8217;lere erişim hakkı tanınıyor. İşte OAuth&#8217;un can alıcı noktasını burada fark edebilirsiniz, &#8220;kullanıcı neye güvenerek istemci uygulamaya kullanıcı adı ve şifre gibi özel bilgilerini versin?&#8221;<span id="more-47"></span></p>
<p>Tahmin edebileceğiniz gibi, OAuth&#8217;da son kullanıcının özel bilgileri ile hiçbir şekilde muhattap olmuyorsunuz. Kullanıcı, yetkilendirmeyi istemcinin API&#8217;sini kullandığı servis üzerinden yapıyor. Böylece, son kullanıcının özel bilgilerine sahip olmamış oluyorsunuz.</p>
<p>Olay istemci tarafında şu şekilde gerçekleşiyor, API&#8217;sini kullanacağınız servise kendi uygulamanızı kayıt ettirerek tanıtıyorsunuz. Servis size iki adet anahtar ( Consumer Key, Consumer Secret ) veriyor. Bu anahtarların ne işe yaradığını ilerki satırlarda anlayacaksınız.</p>
<p>Sonrasında bu anahtarları kullanarak, kullanıcının servis üzerinde giriş yapmasını sağlamak amacıyla, servisten &#8220;oauth token&#8221; (Token Key, Token Secret) anahtarlarını istiyorsunuz. Elde ettiğiniz oauth token anahtarları ile, kullanıcıyı servise yönlendirip giriş yapmasını ve uygulamanıza servisin API&#8217;lerini kullanabilmesi için gereken yetkiyi vermesini istiyorsunuz. Artık son adıma yaklaşıldı. Kullanıcı giriş yaptıktan sonra, kendisine twitter.com&#8217;un tanımıyla bir Pin kodu ya da friendfeed.com&#8217;un tanımıyla bir &#8220;Remote&#8221; kod veriliyor. Bu kod ismteciye verilerek ( web tabanlı uygulamalarda geri dönüş adresi &#8220;callback url&#8221; kullanıldığından dolayı, bu adımı bir nevi atlamanız gerekiyor ) &#8220;oauth_verifier&#8221; parametresi ile doğrulama amaçlı kullanıyor ve son olarak, artık uygulamamızın için kullanıcının kullanıcı adı ve şifresi yerine geçen, sadece servisin izin verdiği alanlarda kullanabileceğimiz, son anahtarları ediniyoruz. Kısaca, artık bizim için o kullanıcının, kullanıcı adı ve şifresi o anahtarlar.</p>
<p>Son olarak anlatılacak şey, &#8220;Consumer Key&#8221; ve &#8220;Consumer Secret&#8221; anahtarlarının ne işe yaradığı. Tahmin edebileceğiniz gibi, bu anahtarlar, son kullanıcının özel bilgileri yerine geçen anahtarların doğrulanmasında, deşifre edilmesinde kullanılıyor. Yani, elde edilen kullanıcı adı ve şifre yerine geçen anahtarlar başka bir şahıs tarafından ele geçirildiğinde, herhangi bir işe yaramıyor, çünkü bu anahtarlar doğrulanırken &#8220;Consumer Key&#8221; ve &#8220;Consumer Secret&#8221; anahtarlarına ihtiyaç duyuluyor.</p>
<p>Ben Twittell adlı uygulamamda kullanmak üzere TwittellOAuth adında bir sınıf yazdım. Sınıfı aslında uygulamamda rahatça kullanabilmek için kendime göre yapılandırdım, genel kitleye hitap edecek bir yanı yok diyebilirim. Ancak siz de twitter.com apilerini kullanan bir uygulama yapmayı planlıyorsanız, oauth yetkilendirmesi için TwittellOAuth sınıfını kendinize göre düzenleyerek ya da düzenlemeden basitçe kullanbilirsiniz.Örnek kullanımı şu şekilde:</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="kw1">from</span> TwittellOAuth <span class="kw1">import</span> TwittellOAuth</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">webbrowser</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ConsumerKey=<span class="st0">&quot;consumer_key&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ConsumerSecret=<span class="st0">&quot;consumer_secret&quot;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#apisini kullanacaginiz servisin verdigi anahtarlar.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek = TwittellOAuth<span class="br0">&#40;</span>ConsumerKey,ConsumerSecret<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">ConsumerKey ve ConsumerSecret anahtarlarimizi vererek nesnemizi olusturuyoruz.</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">ornek.consumer.key ve ornek.consumer.secret uyelerine sahip oluyoruz ancak isimiz yok bunlarla <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </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">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">url = ornek.<span class="me1">GetPin</span><span class="br0">&#40;</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="li2">
<div class="de2"><span class="st0">bu metot ile TwittellOAuth sinifi, consumer bilgilerimizi kullanarak once servisten izin isteyebilmemiz icin</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">gereken anahtarlari ediniyor, sonrasinda o anahtarlari kullanarak son kullanicinin yonlendirilecegi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">adresi bize donuyor.</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">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw3">webbrowser</span>.<span class="kw2">open</span><span class="br0">&#40;</span>url<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">kullanici tarafindan uygulamamiza gereken yetkiyi vermesi icin, giris yapilacak sayfayi, ontanimla tarayicida aciyoruz.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">kullanici giris yaptiktan sonra bir adet pin kodu edinecek.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">oauth_verifier = <span class="kw2">raw_input</span><span class="br0">&#40;</span><span class="st0">&quot;PIN: &quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#kullanicinin edindigi pin kodunu uygulamamiza girmesini istiyoruz.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">token</span> = ornek.<span class="me1">EnterPin</span><span class="br0">&#40;</span>oauth_verifier<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&quot;&quot;</span><span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">sinifa pin kodunu veriyoruz ve sinif bunu &quot;</span>oauth_verifier<span class="st0">&quot; parametresi olarak kullanip servisten</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">kullanicinin kullanici adi ve sifre bilgisi yerine gecen anahtarlari aliyor ve bize teslim ediyor.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">artik tamam <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  token degiskenimiz artik bir liste. Bu listenin ilk ogesi ( token[0] ) token key, </span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">ikinci ogesi ( token[1] ) token secret. bu verileri kaydederek, ileriki surecte, apilere erismek</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">icin kullanacagiz. Yani bunca islem, sadece bir defaya mahsus yapiliyor.</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">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#simdi twitter.com&#8217;un status update apisini kullanarak durumumuzu guncelleyelim <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1">statusupdateurl = <span class="st0">&quot;http://www.twitter.com/statuses/update.json&quot;</span></div>
</li>
<li class="li2">
<div class="de2">status = <span class="st0">&quot;oauth ile apiye erisim&quot;</span></div>
</li>
<li class="li1">
<div class="de1">arg = <span class="br0">&#123;</span><span class="st0">&quot;status&quot;</span>:status<span class="br0">&#125;</span> <span class="co1">#twitter.com status bilgisini &quot;status&quot; parametresi ile aliyor.</span></div>
</li>
<li class="li1">
<div class="de1">istek = ornek.<span class="me1">RequestWithOAuth</span><span class="br0">&#40;</span><span class="st0">&quot;POST&quot;</span>,statusupdateurl,arg<span class="br0">&#41;</span> <span class="co1">#islem tamamdir <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> istek <span class="co1">#servisin cevabini, yani verilen ciktiyi yazdiriyoruz.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</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">son olarak tum bunlardan &quot;</span>kismen<span class="st0">&quot; bagimsiz bir ornek vereyim.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">son kullanicinin kullanici adi ve sifresi yerine gecen token key ve token secret anahtarlarini</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">edinip veritabaniniza kayit ettiniz. Bunca islemi tekrar yapmadan, kullaniciyi yormadan, kisaca</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">herhangi bir islem yapmadan, apilere su sekilde eriseceksiniz:</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">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ConsumerKey=<span class="st0">&quot;consumer_key&quot;</span></div>
</li>
<li class="li1">
<div class="de1">ConsumerSecret=<span class="st0">&quot;consumer_secret&quot;</span></div>
</li>
<li class="li2">
<div class="de2">TokenKey = <span class="st0">&quot;token_key&quot;</span> <span class="co1">#veritabaninizda kayitli token key anahtari</span></div>
</li>
<li class="li1">
<div class="de1">TokenSecret = <span class="st0">&quot;token_secret&quot;</span> <span class="co1">#veritabaninizda kayitli token secret anahtari</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ornek2 = TwittellOAuth<span class="br0">&#40;</span>ConsumerKey,ConsumerSecret,TokenKey,TokenSecret<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">statusupdateurl = <span class="st0">&quot;http://www.twitter.com/statuses/update.json&quot;</span></div>
</li>
<li class="li2">
<div class="de2">status = <span class="st0">&quot;oauth ile apiye ikinci kez erisim&quot;</span></div>
</li>
<li class="li1">
<div class="de1">arg = <span class="br0">&#123;</span><span class="st0">&quot;status&quot;</span>:status<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">istek = ornek2.<span class="me1">RequestWithOAuth</span><span class="br0">&#40;</span><span class="st0">&quot;POST&quot;</span>,statusupdateurl,arg<span class="br0">&#41;</span> <span class="co1">#bu kadar <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">print</span> istek <span class="co1">#servisin cevabini, yani verilen ciktiyi yazdiriyoruz.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><a href='http://www.brsyuksel.com/wp-content/uploads/TwittellOAuth.tar.gz'>TwittellOAuth ve OAuth sınıfı indirmek için tıklayınız.</a></p>
<p>Bitirirken&#8230;<br />
Ben OAuth&#8217;u yeterli seviyede ingilizce bilgisine olmadığımdan dolayı, bir çok örnek kodları inceleyerek öğrendim. Sizler <a href="http://oauth.net">oauth.net</a> adresinden daha düzgün ve daha detaylı bir belge okuyarak kolayca bilgi sahibi olabilirsiniz.<br />
Ayrıca burda vermiş olduğum, TwittellOAuth sınıfını ve örnek kullanımını henüz denemedim.Oluşan hatalar sonucunda beni bilgilendirirseniz çok sevinirim.<br />
Twittell adlı uygulamayı yayınladıktan sonra, kısmet olursa oauth&#8217;un sunucu tarafında kullanımını inceleyen bir yazı yazmayı planlıyorum, bunun da haberini vermiş olayım <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/oauth.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Apache2Screen 0.2 + Deb Paketi</title>
		<link>http://www.brsyuksel.com/apache2screen-0-2-deb-paketi.html</link>
		<comments>http://www.brsyuksel.com/apache2screen-0-2-deb-paketi.html#comments</comments>
		<pubDate>Wed, 29 Jul 2009 23:17:11 +0000</pubDate>
		<dc:creator>brsyuksel</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[apache2screen]]></category>
		<category><![CDATA[apache2screen.deb]]></category>

		<guid isPermaLink="false">http://www.brsyuksel.com/?p=36</guid>
		<description><![CDATA[İlk sürümünün üzerinden tam 17 gün geçtikten sonra, Apache2Screen&#8217;in yeni sürümünü nihayet hazırlayabildim. Yapılacaklar listesinden bir çok şeyi yapmak yerine çıkarmayı tercih ettim ( tembelliğimden değil, gereksiz gördüğüm için ). Bu arada tam bu yazıyı yazarken, bir hata ile karşılaştım ancak, hata uygulamadan değil, benim gereksiz sululuğumdan kaynaklanıyor. Gene de istisnai bir durum olarak ele [...]]]></description>
			<content:encoded><![CDATA[<p>İlk sürümünün üzerinden tam 17 gün geçtikten sonra, Apache2Screen&#8217;in yeni sürümünü nihayet hazırlayabildim. Yapılacaklar listesinden bir çok şeyi yapmak yerine çıkarmayı tercih ettim ( tembelliğimden değil, gereksiz gördüğüm için ).</p>
<p><span id="more-36"></span></p>
<p>Bu arada tam bu yazıyı yazarken, bir hata ile karşılaştım ancak, hata uygulamadan değil, benim gereksiz sululuğumdan kaynaklanıyor. Gene de istisnai bir durum olarak ele alırım. Onun dışında uygulama, benim ilkokul seviyesi İngilizce bilgime maruz kalmış durumda <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Alpcan&#8217;ı yakalayabilseydim, bütün metinleri ona yazdıracaktım ama kendisini gün içerisinde göremedim ne yazık ki. Son olarak söylenmesi gereken şey ise, deb paketi ile fazla ilgilenemedim. Şu anda deb paketinden tek satırlık bilgi ediniyorsunuz, onun dışında başka birşey yok. Kısa sürede bunu da hallederim ( 17 gün kadar. )</p>
<p><a href="http://www.brsyuksel.com/wp-content/uploads/apache2screenv0.2.png"><img class="aligncenter size-medium wp-image-37" title="apache2screenv0.2" src="http://www.brsyuksel.com/wp-content/uploads/apache2screenv0.2-300x210.png" alt="apache2screenv0.2" width="300" height="210" /></a></p>
<p>Apache2Screen&#8217;in deb paketine burdan ulaşabilirsiniz: <a href="http://www.brsyuksel.com/wp-content/uploads/apache2screen-0.2.2.deb">apache2screen-0.2.2</a></p>
<p>*Alpcan&#8217;dan gereken düzenlemeler geldi <img src='http://www.brsyuksel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
*Bash script&#8217;deki hatayı düzelttim. İnsan uykusuz olunca, kendisini interpreter gibi hissediyor, değişken yaratıyor böyle hemen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brsyuksel.com/apache2screen-0-2-deb-paketi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
