gpt4 book ai didi

python - 当参数不变时,适合在 python 类中使用闭包吗?

转载 作者:行者123 更新时间:2023-12-01 07:51:46 24 4
gpt4 key购买 nike

这是一个关于编码约定以及某些东西是否是“Pythonic”或良好实践的问题。

假设我有一个像这样的 python 类:

class ClassName:
def __init__(self, arg1, arg2, arg3, arg4, arg5):
self.arg1 = arg1
self.arg1 = arg2
self.arg1 = arg3
self.arg1 = arg4
self.arg1 = arg5

self.some_var = 0


def some_function1(self):
make use of self.arg1, self.arg2
modify self.some_var

def some_function2(self):
make use of self.arg3, self.arg4, self.arg5
modify self.some_var

其中所有 arg 都被视为常量,用于整个类的计算和方法。

我有时会使用以下模式,而不是这样做:

class ClassName:
def __init__(self, arg1, arg2, arg3, arg4, arg5):
self.some_var = 0

self.some_function1 = self.some_function1(arg1, arg2)
self.some_function2 = self.some_function2(arg3, arg4, arg5)

def some_function1(self, arg1, arg2):
def inner():
make use of arg1, arg2
modify self.some_var
return inner

def some_function2(self, arg3, arg4, arg5):
def inner():
make use of arg3, arg4, arg5
modify self.some_var
return inner

因为我们传递给 __init__ 方法的变量只是在某些计算中用作常量,所以将它们绑定(bind)到函数闭包(从而使它们成为成员变量)是有意义的更合适的范围)。然而,我认为虽然这样做是有道理的,但它很不寻常,而且对某些人来说意义可能并不明显。

这是不好的形式,还是有意义?

最佳答案

下一个维护者绝对会讨厌你。这个方法是从哪里来的呢?为什么根据我查看的是类还是实例,它有不同的签名?我如何子类化这个东西?

不要那样做。请记住,“显式优于隐式”。如果您在方法中使用 self.foo,实际上将其称为 self.foo,以便下一个人一眼就能看出它的定义位置。老实说,很可能下一个人就是你,从现在起六个月后,凌晨 2 点,当某个东西发生故障而你正在尝试解决它时。你拯救的心灵可能是你自己的。

关于python - 当参数不变时,适合在 python 类中使用闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56173210/

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