<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Ubacivanje metoda u postojeće Python objekte</title>
	<atom:link href="http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/feed/" rel="self" type="application/rss+xml" />
	<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/</link>
	<description>Tech, biz, geek, misc</description>
	<lastBuildDate>Tue, 16 Aug 2011 11:52:48 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>By: Dinamičko učitavanje modula u Pythonu</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1093</link>
		<dc:creator>Dinamičko učitavanje modula u Pythonu</dc:creator>
		<pubDate>Mon, 18 May 2009 12:46:08 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1093</guid>
		<description>[...] (Ovo je drugi u nizu postova o Python programiranju koji sam započeo postom o ubacivanju metoda u postojeće Python objekte) [...]</description>
		<content:encoded><![CDATA[<p>[...] (Ovo je drugi u nizu postova o Python programiranju koji sam započeo postom o ubacivanju metoda u postojeće Python objekte) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Senko</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1092</link>
		<dc:creator>Senko</dc:creator>
		<pubDate>Mon, 18 May 2009 12:45:11 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1092</guid>
		<description>@Robert: Slažem se da je monkeypatching opasan, ne-pythonic ali i vrlo moćan (Ruby ekipa se dosta navukla na monkeypatching pa sad jadikuju).

Osobno sam ga koristio par puta za krpanje manjih grešaka u system-wide instaliranim modulima koje nisam želio/mogao forkati (u smislu, promjenio definiciju neke funkcije u postojećoj klasi umjesto da radim podklasu i mijenjam ostatak svog koda kako bi koristio moju podklasu i zaobilazio grešku).

Što se tiče promjene klase postojećim objektima, u postu jesam naveo da mi je više pythonic dodati metodu postojećoj instanci, nego mijenjati klasu te instance. U komentarima je Marcel već naveo konkretan slučaj kad je bilo potrebno mijenjanje metoda već instanciranog objekta.

Post je nastao iz diskusije proizašle iz tog problema, a učinilo mi se da bi bilo zgodno i široj javnosti pokazati što se sve može. IMHO, od viška znanja glava ne boli :)</description>
		<content:encoded><![CDATA[<p>@Robert: Slažem se da je monkeypatching opasan, ne-pythonic ali i vrlo moćan (Ruby ekipa se dosta navukla na monkeypatching pa sad jadikuju).</p>
<p>Osobno sam ga koristio par puta za krpanje manjih grešaka u system-wide instaliranim modulima koje nisam želio/mogao forkati (u smislu, promjenio definiciju neke funkcije u postojećoj klasi umjesto da radim podklasu i mijenjam ostatak svog koda kako bi koristio moju podklasu i zaobilazio grešku).</p>
<p>Što se tiče promjene klase postojećim objektima, u postu jesam naveo da mi je više pythonic dodati metodu postojećoj instanci, nego mijenjati klasu te instance. U komentarima je Marcel već naveo konkretan slučaj kad je bilo potrebno mijenjanje metoda već instanciranog objekta.</p>
<p>Post je nastao iz diskusije proizašle iz tog problema, a učinilo mi se da bi bilo zgodno i široj javnosti pokazati što se sve može. IMHO, od viška znanja glava ne boli :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Robert</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1084</link>
		<dc:creator>Robert</dc:creator>
		<pubDate>Thu, 14 May 2009 15:08:55 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1084</guid>
		<description>Mijenjanje klase na već kreiranom objektu ne bi nikome preporučio. Ostale tehnike &quot;monkey patching-a&quot; (dinamičko kreiranje klase, dodavanje/promjena metode u runtime, generiranje koda, ...), isto nisu za preporuku. 

To što Python to omogućava, ne znači da se to treba koristiti (mogu se u Pythonu i puno &quot;gore&quot; stvari raditi). 

Slažem se s pristupom iz jednog komentara, da je važno vidjeti zašto se to radi, tj. kad to primjeniti. Zato bi bilo dobro da objasniš zašto jedan objekt mora glumiti desetak klasa u runtime-u i zašto baš na ovaj način? 

Python nudi mnoštvo tehnika za postizanje dinamičkih svojstava u runtime-u koje su puno transparentnije ( __getattr__, __setattr__ u inicijalizaciji objekta, ili inicijalizaciji klase / koristiti __metaclass__, ...), gdje svaka od njih ima svoju specifičnu namjenu i prednosti.

Osim što meni osobno MP izgleda &quot;ružno&quot; (doduše i moćno), mislim da se sukobljava s filozofijom Python-a, tj. pep-20 (izdvojeno):

&gt;&gt;&gt; import this
The Zen of Python, by Tim Peters

Explicit is better than implicit.
There should be one-- and preferably only one --obvious way to do it.
Special cases aren&#039;t special enough to break the rules.
In the face of ambiguity, refuse the temptation to guess.
Beautiful is better than ugly.
Simple is better than complex.
Flat is better than nested.
If the implementation is hard to explain, it&#039;s a bad idea.</description>
		<content:encoded><![CDATA[<p>Mijenjanje klase na već kreiranom objektu ne bi nikome preporučio. Ostale tehnike &#8220;monkey patching-a&#8221; (dinamičko kreiranje klase, dodavanje/promjena metode u runtime, generiranje koda, &#8230;), isto nisu za preporuku. </p>
<p>To što Python to omogućava, ne znači da se to treba koristiti (mogu se u Pythonu i puno &#8220;gore&#8221; stvari raditi). </p>
<p>Slažem se s pristupom iz jednog komentara, da je važno vidjeti zašto se to radi, tj. kad to primjeniti. Zato bi bilo dobro da objasniš zašto jedan objekt mora glumiti desetak klasa u runtime-u i zašto baš na ovaj način? </p>
<p>Python nudi mnoštvo tehnika za postizanje dinamičkih svojstava u runtime-u koje su puno transparentnije ( __getattr__, __setattr__ u inicijalizaciji objekta, ili inicijalizaciji klase / koristiti __metaclass__, &#8230;), gdje svaka od njih ima svoju specifičnu namjenu i prednosti.</p>
<p>Osim što meni osobno MP izgleda &#8220;ružno&#8221; (doduše i moćno), mislim da se sukobljava s filozofijom Python-a, tj. pep-20 (izdvojeno):</p>
<p>&gt;&gt;&gt; import this<br />
The Zen of Python, by Tim Peters</p>
<p>Explicit is better than implicit.<br />
There should be one&#8211; and preferably only one &#8211;obvious way to do it.<br />
Special cases aren&#8217;t special enough to break the rules.<br />
In the face of ambiguity, refuse the temptation to guess.<br />
Beautiful is better than ugly.<br />
Simple is better than complex.<br />
Flat is better than nested.<br />
If the implementation is hard to explain, it&#8217;s a bad idea.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: VM</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1080</link>
		<dc:creator>VM</dc:creator>
		<pubDate>Tue, 12 May 2009 12:08:13 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1080</guid>
		<description>Nekad su ovo proglašavali problemom i sigurnosnim rizikom, opasnošću od code injectiona i sličnog. Pa je Python okrenuo pilu naopako i pretvorio to u feature :)</description>
		<content:encoded><![CDATA[<p>Nekad su ovo proglašavali problemom i sigurnosnim rizikom, opasnošću od code injectiona i sličnog. Pa je Python okrenuo pilu naopako i pretvorio to u feature :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: marcell mars</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1078</link>
		<dc:creator>marcell mars</dc:creator>
		<pubDate>Mon, 11 May 2009 09:50:01 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1078</guid>
		<description>zakon post ;)

@slavus mi smo upali u ovu temu iz use case scenarija gdje gradis python aplikaciju u interaktivnom shellu (ipython), pa je super imati mogucnost naknadno modificirati instance... npr. proucavajuci dokumentaciju i gradnjom prvih prototipova u proucavanju nekog novog frameworka....</description>
		<content:encoded><![CDATA[<p>zakon post ;)</p>
<p>@slavus mi smo upali u ovu temu iz use case scenarija gdje gradis python aplikaciju u interaktivnom shellu (ipython), pa je super imati mogucnost naknadno modificirati instance&#8230; npr. proucavajuci dokumentaciju i gradnjom prvih prototipova u proucavanju nekog novog frameworka&#8230;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reader</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1077</link>
		<dc:creator>Reader</dc:creator>
		<pubDate>Mon, 11 May 2009 09:27:06 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1077</guid>
		<description>Od samog objašnjenja KAKO koncept izvesti, više bi smisla imalo objasniti GDJE koncept primijeniti i koji se problemi mogu na taj  (i jedino na taj?!) način riješiti.</description>
		<content:encoded><![CDATA[<p>Od samog objašnjenja KAKO koncept izvesti, više bi smisla imalo objasniti GDJE koncept primijeniti i koji se problemi mogu na taj  (i jedino na taj?!) način riješiti.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Senko</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1076</link>
		<dc:creator>Senko</dc:creator>
		<pubDate>Mon, 11 May 2009 08:07:21 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1076</guid>
		<description>Yep, slažem se, kod korištenja ovakvih stvari treba imati vrlo dobre razloge zašto to a ne nešto drugačije / standardnije.

Ali dobro je znati da imaš automatsku pušku ako ti zatreba :-)</description>
		<content:encoded><![CDATA[<p>Yep, slažem se, kod korištenja ovakvih stvari treba imati vrlo dobre razloge zašto to a ne nešto drugačije / standardnije.</p>
<p>Ali dobro je znati da imaš automatsku pušku ako ti zatreba :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: slavus</title>
		<link>http://senko.net/ubacivanje-metoda-u-postojece-python-objekte/comment-page-1/#comment-1075</link>
		<dc:creator>slavus</dc:creator>
		<pubDate>Mon, 11 May 2009 07:55:53 +0000</pubDate>
		<guid isPermaLink="false">http://senko.net/?p=241#comment-1075</guid>
		<description>Ovo funkcionira, i dobro je da se u Pythonu ovako nešto može izvesti. 
Ali već vidim kako ovo ekipa zloupotrebljava ovakvu tehniku. Ovo je inače dosta netrasparentno što se software dizjana tiče. Sličnu tehniku sam ja koristio u Java scritpu (no da bi dobio polimorfizam, kojeg po defaultu nema u JS), no takovo dodavanje metoda u razred je vrlo ne transparento i netko se može kasnije pitati od kud ova metoda ovdje. Kao što si i sam rekao, Netko ti je ovim dao automatsku pušku, a sad je na programeu da se ne upuca u nogu.</description>
		<content:encoded><![CDATA[<p>Ovo funkcionira, i dobro je da se u Pythonu ovako nešto može izvesti.<br />
Ali već vidim kako ovo ekipa zloupotrebljava ovakvu tehniku. Ovo je inače dosta netrasparentno što se software dizjana tiče. Sličnu tehniku sam ja koristio u Java scritpu (no da bi dobio polimorfizam, kojeg po defaultu nema u JS), no takovo dodavanje metoda u razred je vrlo ne transparento i netko se može kasnije pitati od kud ova metoda ovdje. Kao što si i sam rekao, Netko ti je ovim dao automatsku pušku, a sad je na programeu da se ne upuca u nogu.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

