【发布时间】:2019-11-22 08:46:08
【问题描述】:
我遇到过这样一种情况,如果某个条件是False,类的大多数方法在调用时都需要引发异常,除了一个。可以进入大多数方法并编写if not condition,这样如果条件不成立,每个方法都会引发异常,但我认为可以通过类顶部的单个装饰器以某种方式做到这一点.
This question 类似,但它涉及单独装饰每个方法,如果我要这样做,我不妨将if 语句放入每个方法中。
这里有一些代码和 cmets 来帮助传达它:
CONDITION = True # change to False to test
def CheckMethods():
if CONDITION:
# run all the methods as usual if they are called
pass
else:
# raise an exception for any method which is called except 'cow'
# if 'cow' method is called, run it as usual
pass
@CheckMethods
class AnimalCalls:
def dog(self):
print("woof")
def cat(self):
print("miaow")
def cow(self):
print("moo")
def sheep(self)
print("baa")
a = AnimalCalls()
a.dog()
a.cat()
a.cow()
a.sheep()
有人知道怎么做吗?以前从未装饰过一个类或尝试过像这样检查它的方法。
【问题讨论】:
-
您确定要装饰器而不是代理吗?
-
我不确定那是什么。只要它检查一个条件,然后如果它不是真的大多数方法都会引发异常..
-
@cardamom:应该在每次通话时单独检查条件,对吧?你的伪代码不会那样做。
-
@DavisHerring 的意图在每一个实例化中都更为突出,至少与激发它的其他代码的工作方式相吻合
-
@cardamom,你打算动态切换“条件”吗?是否需要恢复之前关闭的原始方法?
标签: python python-3.x class oop decorator