SORU
26 EYLÜL 2010, Pazar


____ ____ Hazırlanın anlayış ve Python tanımlayıcıları

BençalışıyorPython'un tanımlayıcıları ne olduğunu ve ne onlar için yararlı anlamak için. Ancak bunda başarısız oldum. Nasıl çalıştığını anlıyorum, ama burada benim şüphelerim. Aşağıdaki kodu göz önünde bulundurun:

class Celsius(object):
    def __init__(self, value=0.0):
        self.value = float(value)
    def __get__(self, instance, owner):
        return self.value
    def __set__(self, instance, value):
        self.value = float(value)


class Temperature(object):
    celsius = Celsius()
  1. Neden açıklayıcı sınıf ihtiyacım var mı? Bu örnek ile açıklamak ya da daha iyi olduğunu düşünüyorum birini lütfen.

  2. instance owner nedir? (__get__). Yani benim soru, üçüncü parametre burada amacı nedir?

  3. Nasıl bu örneği kullanmak diyebilir miyim?

Böyle bir çaylak olduğum için üzgünüm, ama gerçekten bu çalışma almak için nasıl anlayamıyorum.

CEVAP
26 EYLÜL 2010, Pazar


Tanımlayıcısı nasıl python property tip uygulanır. Bir tanımlayıcı basitçe söylemek gerekirse __get__, __set__, vb uygular. ve sonra onun tanımı üzerinde Sıcaklık sınıfı ile yaptığınız gibi) başka bir sınıf eklenir. Örneğin

temp=Temperature()
temp.celsius #calls Celsius.__get__

Bu özellik tanımlayıcısı (yukarıdaki örnekte celsius) atanan erişim arama uygun bir tanımlama yöntemi.

instance __get__ örnek sınıf (yani yukarıda, __get__ alması temp, owner sınıf tanımlayıcısı (bu kadar olur Temperature).

Mantık bu güçler saklanması için tanımlayıcı bir sınıf kullanmanız gerekir. Eğer tanımlayıcısı pahalı bir işlem (örneğin) önbellek için kullanılır, böylece, kendi değerini ve kendi sınıfında değil mağaza.

Tanımlayıcıları hakkında bir makale http://martyalchin.com/2007/nov/23/python-descriptors-part-1-of-2/ bulunabilir

EDİT: jchl açıklamalarda belirttiği Gibi, eğer sadece çalışırsanız Temperature.celsius, instance None olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • ODN

    ODN

    26 Kasım 2006
  • FF Radioo

    FF Radioo

    14 ŞUBAT 2007