我对什么是不可变类型感到困惑。我知道该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)
,如果我将这种类型的set传递给它:
d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
不调用该example
方法,它返回一个字典。在SortedKeyDict
用__new__
其标记为错误。我尝试使用将整数传递给RoundFloat
类,__new__
并且它未标记任何错误。