Tôi bối rối về loại bất biến là gì. Tôi biết floatđối tượng được coi là bất biến, với loại ví dụ này từ cuốn sách của tôi:
class RoundFloat(float):
def __new__(cls, val):
return float.__new__(cls, round(val, 2))
Điều này có được coi là bất biến vì cấu trúc / phân cấp lớp không?, Nghĩa floatlà ở đầu lớp và là lời gọi phương thức riêng của nó. Tương tự như loại ví dụ này (mặc dù cuốn sách của tôi nói dictlà có thể thay đổi):
class SortedKeyDict(dict):
def __new__(cls, val):
return dict.__new__(cls, val.clear())
Trong khi một cái gì đó có thể thay đổi có các phương thức bên trong lớp, với loại ví dụ này:
class SortedKeyDict_a(dict):
def example(self):
return self.keys()
Ngoài ra, cuối cùng class(SortedKeyDict_a), nếu tôi chuyển loại thiết lập này cho nó:
d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
mà không gọi examplephương thức, nó trả về một từ điển. Các SortedKeyDictvới __new__cờ nó như là một lỗi. Tôi đã thử chuyển số nguyên cho RoundFloatlớp __new__và nó không gắn cờ.
