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
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
&; Az Şaşkınlık " " Python: Değiş...
Nasıl Python değişken türünü belirleme...
'değişken' anahtar kelime he...
Oluşturma Python sabit...
Nasıl Python iki değişken mantıksal xo...