我有一个类Book,它有一个属性editable
,还有其他:
class Book():
def __init__(self, name, ..., editable=True):
self.name = name
...
self.editable = editable
Book
包含方法get_details()
,set_details()
和delete()
。
如果editable
设置为False
,我想在set_details()
和delete()
中引发异常,说明该书不可编辑。
我已经阅读了Python文档但是我找不到类似于不可编辑异常的任何内容。
提出自定义异常是实现此目的的最佳方式,还是有人可以提出另一种解决方法?
谢谢!
答案 0 :(得分:1)
据我所知,python没有这种类型的异常。您可以定义自己的自定义Exception类。
class NotEditableException(Exception):
def __init__(self,message="Not editable"):
super(NotEditableException,self).__init__(message)
现在您可以通过以下方式提出异常。
if not self.editable:
raise NotEditableException("This is your error message");
答案 1 :(得分:1)
我建议使用属性装饰器来限制可变属性。 例如,考虑:
class Book(object):
"""My book object is a wrapper for details"""
class Details(object):
"""My details object"""
def __init__(self):
self._details = Details()
@properties
def details(self):
return self._details
试图运行
book = Book()
book.details = new_details
会提出AttributeError。要使用可编辑标志“关闭和打开”,可以添加以下修饰方法:
@details.setter
def details(self, new_details):
if self._editable:
self._details = new_details
else:
raise AttributeError("Attribute cannot be set when Book is not editable.")
至于删除,Python的垃圾收集器应该清理旧变量,只要你对范围很聪明:)
有关属性和设置器的更多信息,请check out this。如果您打算在某一点之后使“书”不可变,我建议您查看一个factory design pattern(您将以编程方式构建书类,然后再展开它),而不是打开和关闭标志。