我有以下類:Python中,繼承不變類型
class MySet(set):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
set.__init__(self, arg)
可正常工作(初始化設定以字符串的話,而不是字母)。然而,當我想要做一套一成不變的版本一樣,__init__
方法似乎被忽略:
class MySet(frozenset):
def __init__(self, arg=None):
if isinstance(arg, basestring):
arg = arg.split()
frozenset.__init__(self, arg)
我可以實現與__new__
類似的東西?
我認爲'__new __(..)'採取主動的原因,當談到雕刻不可變類型的實例是利用不變性,並保留一個機會返回現有的實例(如果可用)。 (但是如果一個人不想要這個優點,那麼他們可以在不干擾'__new __(..)'的情況下創建一個不可變類型,特別是'__new __(..)'不提供任何特殊的上下文。必須通過'object .__ setattr __(..)'或類似的方法來修改不可變字段,無論是在'__new __(..)'還是'__init _(..)'中。) – 2015-07-29 12:37:36