gpt4 book ai didi

python - 将装饰器应用于 __init__ 函数是pythonic吗?

转载 作者:行者123 更新时间:2023-11-28 21:31:24 25 4
gpt4 key购买 nike

遇到需要对 __init__() args 做一些健全性检查。我们想将这种健全性检查逻辑转移到装饰器中。

我做了一些原型(prototype)设计,似乎将装饰器应用于 __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__ 上面有一个装饰器似乎有点乱。但除此之外,这有什么缺点吗?有什么非 pythnoic 的吗?

最佳答案

:Python 的原则之一是尽量减少困惑以提高可读性,包装器就是这样做的。 __init__ 的设计目的是初始化传递的参数 - 这有它的好处:

  • 阅读代码时更容易理解给定类将使用哪些参数
  • 如果所述包装器具有重要的功能(arg 检查等),与位于 __init__
  • Keras在一个类似于 init 的方法周围使用两个包装器,所以这并不少见


:如果 __init__ 出于任何原因涉及调用其他方法,包装器也将应用于它——这可能是非常不受欢迎的。堆叠 wrapper 也需要仔细设计。这些都违背了 Python 中 显式的原则;它代表读者引入了额外的理清,否则可以通过类方法避免。


结论:视情况而定。一般来说,没有。有时,是的 - 可以提高可读性。

关于python - 将装饰器应用于 __init__ 函数是pythonic吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58175778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com