如何在python中使类不可变?
发布时间:2020-12-20 11:34:14 所属栏目:Python 来源:网络整理
导读:参见英文答案 How to make an immutable object in Python?????????????????????????????????????21个 我在这里已经阅读了很多关于这个主题但我仍然找不到合适的答案. 我有一个类: class A(object): def __init__(self,first,second): self.first = first s
参见英文答案 >
How to make an immutable object in Python?????????????????????????????????????21个
我在这里已经阅读了很多关于这个主题但我仍然找不到合适的答案. 我有一个类: class A(object): def __init__(self,first,second): self.first = first self.second = second def __eq__(self,other): return **** def __str__(self): return ***** def __repr__(self): return **** a = A("a","b") 我怎么能禁止a.first =“c”呢? 解决方法
您可以覆盖__setattr__以阻止任何更改:
def __setattr__(self,name,value): raise AttributeError('''Can't set attribute "{0}"'''.format(name)) 或阻止添加新属性: def __setattr__(self,value): if not hasattr(self,name): raise AttributeError('''Can't set attribute "{0}"'''.format(name)) # Or whatever the base class is,if not object. # You can use super(),if appropriate. object.__setattr__(self,value) 您还可以使用针对允许属性列表的检查来替换hasattr: if name not in list_of_allowed_attributes_to_change: raise AttributeError('''Can't set attribute "{0}"'''.format(name)) 另一种方法是使用属性而不是普通属性: class A(object): def __init__(self,second): self._first = first self._second = second @property def first(self): return self._first @property def second(self): return self._second (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |