![]() | |
| | #1 (permalink) |
| . . :: pCuber :: . . Üyelik Tarihi: 02/2007
Mesaj: 440
|
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... |
| | |
| | #2 (permalink) |
| Eski Cevizci Üyelik Tarihi: 05/2004
Mesaj: 792
|
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) |
| | |
| | #3 (permalink) |
| . . :: pCuber :: . . Üyelik Tarihi: 02/2007
Mesaj: 440
|
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... |
| | |
![]() |
| Bookmarks |
| Seçenekler | |
| |
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 |
| 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 | |