Я в замешательстве относительно того, что такое неизменный тип.Я знаю, что объект float
считается неизменяемым, с таким примером из моей книги:
class RoundFloat(float):
def __new__(cls, val):
return float.__new__(cls, round(val, 2))
Считается ли это неизменным из-за структуры класса / иерархии?, что означает, что float
находится в верхней части класса и является собственным вызовом метода. Аналогично этому типу примера (хотя в моей книге говорится, что dict
изменяем):
class SortedKeyDict(dict):
def __new__(cls, val):
return dict.__new__(cls, val.clear())
В то время как что-то изменчивое имеет методы внутри класса, с этим типом примера:
class SortedKeyDict_a(dict):
def example(self):
return self.keys()
Кроме того, для последнего class(SortedKeyDict_a)
, если я передаю ему этот тип набора:
d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
без вызова метода example
, он возвращает словарь. SortedKeyDict
с _new_
помечает его как ошибку. Я попытался передать целые числа в класс RoundFloat
с помощью _new_
, и он не пометил ошибок.