我在这里已经阅读了很多关于这个主题但我仍然找不到合适的答案.
我有一个类:
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总结
以上是内存溢出为你收集整理的如何在python中使类不可变?全部内容,希望文章能够帮你解决如何在python中使类不可变?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)