【发布时间】:2015-06-10 23:20:10
【问题描述】:
我正在使用 python 编写代码,以便更好地了解使用类时的良好做法。我为几个类写了一些方法;狗和人。我介绍了一种名为 die 的狗的新方法,定义如下:
def die(self):
if self.owner:
self.owner.pets.discard(self)
self.owner = None
self.dead = True
现在我不想对死狗使用大多数其他方法,即人领养宠物的方法(person.adopt(self,pet))。由于这种情况有很多方法(可能还会有更多方法),我想避免在每个要求狗活着的方法中添加 if 语句。有没有办法在给定条件(例如 self.dead == False)的情况下根本不允许某些方法?
【问题讨论】:
-
你的例子是对人的一种方法,而不是对宠物的一种方法。因此,您需要在该人的
adopt方法中使用 if 语句来查看宠物是否已死亡;不是宠物的方法。 -
对,但是我有很多方法需要亲自检查宠物是否还活着,有没有更优雅的方法?
-
您希望不允许的方法做什么:引发 AttributeError(即,该方法只是从类中消失),引发 NotImplementedError,引发另一个错误(例如,ValueError),还是什么都不做(类似于
pass)? -
好吧,我想我真正要问的是处理这种情况的更可取的方法,不难想象这种东西在很多其他地方使用,所以我只是想了解其他人如何处理它以及是否有一些首选方式。