需要对__init__()
参数进行健全性检查。我们想将这种健全性检查逻辑转移到装饰器中。
我做了一些原型设计,似乎将装饰器应用于__init__()
确实可行:
def my_dec(func):
def wrapper(*args, **kwargs):
print('a')
func(*args, **kwargs)
return wrapper
class testClass(object):
@my_dec
def __init__(self):
print('b')
在__init__
上方有一个装饰器似乎有些混乱。但是除此之外,这还有什么缺点吗?有什么非精神病吗?
答案 0 :(得分:4)
是的:Python的原则之一是使混乱最小化以提高可读性,这就是包装程序所做的。根据设计,__init__
旨在初始化传递的参数-它具有以下优点:
__init__
出于任何原因而涉及调用其他方法,则包装程序也将应用于该方法-这是非常不希望的。堆叠包装纸还需要仔细设计。这些都违背了Python中的 explicitness 原理。它代表读者引入了其他解缠,否则将通过类方法避免。
判决:取决于。一般来说,没有。有时候,可以-可以提高可读性。
答案 1 :(得分:1)
我认为这里的“ pythonic”可能是主观的(我可能会轻描淡写),但我相信要遵循更标准的方法并在__init__
内进行完整性检查,并在以后的调试或与团队合作时。
类似的事情似乎在做同样的事情,但感觉更自然,更容易遵循。
def sanity_check():
print('a')
#do checks here
return True #or False
class testClass(object):
def __init__(self):
if sanity_check():
print('b')