Ceviz Forum

Geri Dön   Ceviz Forum > Programlama > Python / Zope

Cevapla
 
LinkBack Seçenekler
Eski 03/11/2007, 23:06   #1 (permalink)
. . :: pCuber :: . .
 
hasanyasin Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2007
Mesaj: 440
Varsayılan Tatlı Tatlı Sorular (2)

a={}
a['blah'] = 'booo'
a['foo'] = 'tooo'
a['joo'] = 'fiyuuu'

şeklinde bir a dictionary nesnesi oluşturup buna bu şekilde elemanlar ekleyip bunları kullanabiliyorum. Lakin uygulama geliştirici grubumuzda son derece tembel mühendislerimiz var ve bunlar string sözlük anahtarları yerine doğrudan nesne alt nesneleri elde etmek istiyorlar. Şöyle ki:

a=LazyClass()
a.blah = 'booo'
a.foo = 'tooo'
a.joo = fiyuuu

Bu elemanlara bu şekilde ulaşabilmelerinin yanısıra, a nesnesinin şu özel metod ve özelliklerinin olmasını da istiyorlar:

a.childCount: a'nın bizim eklememizle oluşan çocuk nesnelerinin sayısı
a.printAll(): a'nın bizim oluşturduğumuz tüm çocuklarını ve değerlerini yazdıran metod
a.drop('elemanİsmi'): elemanİsmi olarak girilen çocuk nesneyi silen metod
a.drop(aListOfStrs): aListOfStrs ile verilen listede yer alan tüm stringlerdeki isimlere sahip elemanları silen metod.

Bu projede bizden istenen LazyClass'ı yazmamız. Bu bir algoritma sorusu değil, python dilinin özelliklerine hakim olmayı gerektiren bir soru.

Kolay gelsin... (:

[NOT: Olaylar tamamen kurgu ve bu soruları ben öğrenmek değil genç arkadaşların Python dilinin harikalıklarına ilgilerini uyandırmak için soruyorum.]
__________________
tebessüm edebilmek sanattır...
hasanyasin hatta değil   Alıntı Yaparak Yanıtla
Eski 04/11/2007, 14:26   #2 (permalink)
Eski Cevizci
 
myavuzselim Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2004
Mesaj: 792
Varsayılan

Yeni girdileri icin nesneye yeni bir dictionary ekleyeyim ve __getattr__'i override edeyim dedim, ama obj.x ile __getattr__, __getattribute__ vs iliskisini tam olarak anlamadan sonsuz ozyinelemeye girmemek mumkun degil sanki. __getattr__'dan uzak durarak su sekilde cozdum:
Kod:
class LazyClass:
	
	def __init__(self):
		self.__dict__['__bizim__'] = set()
	
	def __setattr__(self, name, value):
		if name not in self.__dict__:
			self.__bizim__.add(name)
		self.__dict__[name] = value
	
	def childCount(self):
		return len(self.__bizim__)
	
	def printAll(self):
		for name in self.__bizim__:
			print name, ':', self.__dict__[name]
	
	def drop(self, eleman):
		if type(eleman) == str:
			if eleman in self.__bizim__:
				self.__bizim__.remove(eleman)
				del self.__dict__[eleman]
		else:
			for e in eleman:
				self.drop(e)
Ayrica simdi http://www.devx.com/opensource/Article/31482/0/page/4 ile karsilastim. Descriptor'lar bana ilginc geldi, demek ki obj.x deyimi bayagi karmasik bir sekilde calisiyor.
myavuzselim hatta değil   Alıntı Yaparak Yanıtla
Eski 04/11/2007, 14:47   #3 (permalink)
. . :: pCuber :: . .
 
hasanyasin Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2007
Mesaj: 440
Varsayılan

Tekrardan tebrikler. (: Link verdiğiniz metnin de az çok değindiği konuyu Python Language Reference'ta detaylıca inceleyebilirsiniz.

Bu örnekte hem çok gelişmiş bazı nesne yönelimi özelliklerine kısaca göz atmış hem de Python'da function overload nasıl yapılır (drop metoduyla) görmüş olduk.

Sorumuza bir küçük eklenti yapalım: LazyClass'ımıza ekleyeceğimiz özel isimli bir metodla, a.b'ye değer vermeden a.b'yi kullanmak istediğimizde bize AttributeError istisnası patlatmak yerine None nesnesi döndürmesini nasıl sağlarız?

Bu arada yeni sorumuz da hemen geliyor(:
__________________
tebessüm edebilmek sanattır...
hasanyasin hatta değil   Alıntı Yaparak Yanıtla
Eski 05/11/2007, 23:38   #4 (permalink)
Eski Cevizci
 
myavuzselim Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 05/2004
Mesaj: 792
Varsayılan

Alıntı:
LazyClass'ımıza ekleyeceğimiz özel isimli bir metodla
bunu tam anlamadim, metodun adi "ozel" mi olacak?
myavuzselim hatta değil   Alıntı Yaparak Yanıtla
Eski 07/11/2007, 15:55   #5 (permalink)
. . :: pCuber :: . .
 
hasanyasin Adlı Üyenin Profil Grafiği
 
Üyelik Tarihi: 02/2007
Mesaj: 440
Varsayılan

İsim "özel" olmayacak, Python için özel anlama sahip bir metod olacak(:
__________________
tebessüm edebilmek sanattır...
hasanyasin hatta değil   Alıntı Yaparak Yanıtla
Cevapla

Bookmarks

Seçenekler

Mesaj Yazma Hakları
Yeni mesajgöndermezsiniz
Cevap yazamazsınız
Dosya ekleyemezsiniz
Mesajınızı düzenleyemezsiniz

BB code is Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks are Açık
Pingbacks are Açık
Refbacks are Açık

Benzer Konular
Konu Konuyu açana göre Forum Cevap En Son Mesaj
Tatlı Tatlı Sorular (1) hasanyasin Python / Zope 6 03/11/2007 22:50
Tatlı Dilli Ceren MEHMET Kültür ve Sanat 25 21/08/2006 02:24
Bunlar çok tatlı :) ApexLoader Ceviz.net Hakkında 1 07/05/2006 22:11
SDL hakkında sorular(?) virU C / C++ 3 20/11/2004 21:42
projem hakkında sorular, sorular... mthT PHP 22 17/06/2004 02:13


Forum saati Türkiye saatine göredir. GMT +3. Şu anda saat 06:32.

Reklamlar & Desteklenenler
Hassas Valf | Hassas Kaplama | Antalyamız | Gazete | Ticari Bilişim | Hakan Müştak | Rüya Tabirleri | Kadın | Hastalıklar | Cepte msn ve e-posta | Webmaster | Antalya Aupair | Turkish Property Antalya | Forum | Chat | Perde | Adsl | Araba | bolindir.com | guncelle.com | livescore | Web Tasarım | evden eve nakliyat | forum | evden eve | sohbet | Resimcim| Kalifiye İnsan Kaynakları | Web Tasarım | Oyun | Yusuf KOÇ | Akın Yorulmaz | şiir | UFO | Web Tasarım | Oyunlar | Canlı Tv |


Forum Yazılımı: vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright ©2001 - 2008, Ceviz.net