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 float
là ở đầ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 dict
là 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 example
phương thức, nó trả về một từ điển. Các SortedKeyDict
với __new__
cờ nó như là một lỗi. Tôi đã thử chuyển số nguyên cho RoundFloat
lớp __new__
và nó không gắn cờ.