Tamam, bir şeyler yapılıyor ama, bu gene bahse konu şey değil. abc
modülünden alınan bir özellik bu. Gene dile bir şey katmıyor, bir tür
kütüphane gibi çalışıyor.

Sorun ve daha doğrusu fark şurada. Bu tür bir abstract class tanımının
doğrulanması gene runtime'da yapılabilir. Hani nerde bunun eksik
metotları şeklinde bir bilgi vermez siz python. BU teknik olarak,
"hasattr" gibi şeyler elle yapabileceğiniz şeyleri otomatize ediyor
biraz.

Bunu farkedip kodları bunu bilerek yazınca sanıyorum pek sorun olmaz.

2012/5/25 emin demirci <[email protected]>:
> Serdar Köylü'nün bahsettiği durumdan haberdarım ancak şu anki durumda benim
> yazacağım modülü başka kullanıcılar da kullanacak ve herşeyin runtime
> sırasında değiştirilmesini istemiyorum.Python'un mantığına ters onun
> farkındayım ancak proje bunu gerektiriyor.
>
> Mesela Serialazable gibi bir interface i Python tarafında
>
> class Serializable:
>     __metaclass__ = ABCMeta
>     @abstractmethod
>     def writeData(self,output):
>         raise NotImplementedError
>     @abstractmethod
>     def readData(self,input):
>         raise NotImplementedError
>
> şeklinde kodladım. Bunu miras alacak classların readData ve writeData
> metodlarını kendisine göre implemente etmesi gerekiyor. Bu şekilde biraz
> daha istediğim yapıya yaklaşmış oluyorum.
>
>
>
>
> 24 Mayıs 2012 17:34 tarihinde Mehmet Özgür Bayhan <[email protected]>
> yazdı:
>>
>>
>> Yazının geneli doğru olmakla beraber bir iki yerde ciddi hata var.İyice
>> kafa karışıklığına yol açmaması için düzelme ihtiyacı duydum.Özellikle Emin
>> demirci gibi Java tarafından gelenler için.
>>
>>
>> 24 Mayıs 2012 16:45 tarihinde Serdar KÖYLÜ <[email protected]> yazdı:
>>
>>> Fark, java ve python'un yaklaşımında gizli. Python yorumlayıcı, java
>>> derleyici. Ve python runtime'da her şeyi değiştirmenize imkan
>>> sağlıyor. Bu, teknik olarak, herşeyin zaten bir abstract class
>>> olmasına yol açıyor. Şu olaya bakalım:
>>>
>>
>> Tam tersine bu dinamiklik hiçbir şeyin abstract class olarak
>> kullanılamıyacağı sonucunu çıkartıyor.Şöyleki abstract class lar aynı
>> zamanda sizin miras alacak olan sınıfınızın şekil şemalini
>> belirler.Soyut(abstract) olmasının nedeni sonradan keyfi
>> değiştirilebilirlikten değil tam tersine türeteceğiniz sınıfın şekil
>> şemalini belirlerken işlevsellikten -kısmen- uzak olmasından kaynaklanıyor.
>>
>>> Python'da veri tipi diye bir kavram yok, float, int, string vs. vs.
>>> söz konusu değil.
>>>
>>
>> Aslında var gördüğüm kadarıyla.str(x) dediğiniz anda nesnenizin bellekteki
>> şekil şemalini String yapısına uyacak şekilde biçimlendirmiş
>> oluyorsunuz.Sadece bu şekil şemal dinamik olarak değiştirilebiliyor.
>> Şöyleki:
>> >>> a=3
>> >>> type(a)
>> <type 'int'>
>> >>>
>>
>>
>>>
>>> Ve evet, her şey aslında bir abstract class tanımıyla işliyor bu
>>> şekilde.
>>
>>
>> Tam tersine herşey bir abstract class mantığının çok uzağında belirli
>> ayrılmış alanlar yerine heap mantığında çalışıyor.Bu da bir abstraction
>> olayını imkansız hale getiriyor.Bu dilin güzel fakat aynı zamanda ihtiyaç
>> duyulduğunda da kötü bir tarafı.
>>
>> Zaman zaman saç baş yoldurduğu oluyor (: Keza yapı tamamen denetiminiz
>> dışına çıkabiliyor.
>>
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> [email protected]
>> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>
>
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> https://liste.linux.org.tr/mailman/listinfo/linux-programlama
> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>
_______________________________________________
Linux-programlama mailing list
[email protected]
https://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap