SORU
8 Kasım 2011, Salı


Sabit vs değişken türleri - Python

Değişmez bir türü ne olduğu konusunda kafam karıştı. float nesne değişmez, kitabımdan örnek bu tür olarak kabul edilir biliyorum:

   class RoundFloat(float):
       def __new__(cls, val):
           return float.__new__(cls, round(val, 2))

Bu, sınıf yapısı / hiyerarşisi? çünkü, değişmez olarak kabul edilir float anlam sınıfının en üstünde ve kendi yöntemi çağrısı. Örnek kitabım dict değişken olduğunu söylüyor olsa bile) bu tür benzer:

   class SortedKeyDict(dict):
       def __new__(cls, val):
           return dict.__new__(cls, val.clear())

Bir şey ise değişken sınıf, örnek: bu tür içinde yöntemleri vardır

   class SortedKeyDict_a(dict):
       def example(self):
           return self.keys()

Ayrıca, en son eğer bu set bu tür geçersem class(SortedKeyDict_a),:

d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))

example yöntemi çağırmadan, bir sözlük döndürür. __new__ 15 *bir hata olarak işaretler. __new__ RoundFloat sınıf tamsayılar geçen denedim ve hiçbir hata tespit etti. Biri çalışıyor, neden beni aydınlat lütfen.

Değişmez türleri vs olmayan benim anlayışı ile yardım lütfen.

CEVAP
8 Kasım 2011, Salı


Python nesneler olarak tüm verilerini temsil ettiğini anlamak zorundayız. Listeler ve sözlükler gibi bu nesnelerin bazıları değiştirilebilir, kimliklerini değiştirmeden içeriklerini değiştirebilirsiniz anlamına gelir. Tamsayılar, yüzer, dizeleri ve dizilerini gibi diğer nesneleri ... değiştirilemez nesnelerdir. Bunu anlamak için kolay bir yol ise nesne KİMLİĞİ bir göz varsa.

Değişmez bir dize aşağıya bakınız. İçeriği değiştiremezsiniz. Eğer onu değiştirmeye çalışırsanız siz de bir hata ile olacaktır. Eğer yeni içerik atamak ayrıca, yeni bir nesne içeriği değiştirilmiş yerine oluşturulur.

>>> s = "abc"
>>>id(s)
4702124
>>> s[0] 
'a'
>>> s[0] = "o"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s = "xyz"
>>>id(s)
4800100
>>> s  = "uvw"
>>>id(s)
4800500

Bir liste ile bunu yapabilir ve nesneleri kimliği değişmez

>>> i = [1,2,3]
>>>id(i)
2146718700
>>> i[0] 
1
>>> i[0] = 7
>>> id(i)
2146718700

Okumak için Python dil başvurusu bakabilirsiniz burada veri modeli Piton: http://docs.python.org/reference/datamodel.html

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • pjtoohot

    pjtoohot

    15 NİSAN 2008