如何在Python中創(chuàng)建不可變對象?雖然我從來沒有需要這個,但讓我感到震驚的是在Python中創(chuàng)建一個不可變對象可能會有點棘手。你不能只是覆蓋__setattr__,因為那時你甚至不能設(shè)置屬性__init__。對元組進(jìn)行子類化是一種有效的技巧:class Immutable(tuple):
def __new__(cls, a, b):
return tuple.__new__(cls, (a, b))
@property
def a(self):
return self[0]
@property
def b(self):
return self[1]
def __str__(self):
return "<Immutable {0}, {1}>".format(self.a, self.b)
def __setattr__(self, *ignored):
raise NotImplementedError
def __delattr__(self, *ignored):
raise NotImplementedError但是你可以通過和訪問a和b變量,這很煩人。self[0]self[1]這在純Python中是否可行?如果沒有,我將如何使用C擴(kuò)展?(只能在Python 3中使用的答案是可以接受的)。更新:因此,子類的元組是做純Python,效果很好,除了通過訪問數(shù)據(jù)的另一種可能性的方式[0],[1]等等。所以,要完成這個問題,所有這一切都缺少的是HOWTO在C,做“正確的”,這我懷疑是非常簡單,只是沒有實現(xiàn)任何geititem或setattribute等等。但我不是自己做,我為此提供賞金,因為我很懶。:)
如何在Python中創(chuàng)建不可變對象?
慕的地6264312
2019-08-15 16:15:02