我是否应该使用;“自我”;每次在Python类中更新变量的版本
这更多的是关于在Python中使用我是否应该使用;“自我”;每次在Python类中更新变量的版本,python,python-3.x,Python,Python 3.x,这更多的是关于在Python中使用self的最佳实践或最佳风格提示,而不是如何使用它。基本上,我的问题是,我应该尽快使用变量的“self”版本,并且每次之后都使用,还是有时使用“non-self”版本比较合适 下面是一个示例,我会尽快使用变量的“自我”版本: def outside_function1(var1, var2): """Does something""" def outside_function2(var
self
的最佳实践或最佳风格提示,而不是如何使用它。基本上,我的问题是,我应该尽快使用变量的“self”版本,并且每次之后都使用,还是有时使用“non-self”版本比较合适
下面是一个示例,我会尽快使用变量的“自我”版本:
def outside_function1(var1, var2):
"""Does something"""
def outside_function2(var1, var2):
"""Does something else"""
class MyClass1:
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
self.variable_to_calculate = outside_function1(self.a, self.b, self.c) + outside_fuction2(self.a, self.b, self.d)
下面是一个不同的示例,我在同一个init函数中不使用变量的“self”版本:
class MyClass2:
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
self.variable_to_calculate = outside_function1(a, b, c) + outside_fuction2(a, b, d)
如果您没有捕捉到它,那么差异就在self.variable\u to\u calculate
行上
我的想法是,第二个例子,我没有每次都使用self
,可能更具可读性。它使你不必向右滚动阅读整行内容。我还认为,它可以更快地判断哪些变量被传递到外部函数中。但我也可以看到,使用第一个例子可能会更加清晰
因此,如果这两个例子的作用完全相同,那么其中一个更正确吗?我个人会尽快使用自变量。原因是可维护性。init函数的参数仅用于向构造函数提供信息 假设将来您不想再直接使用VarB调用外部函数,因为您的类已被修改,VarB现在被拆分为VarE和VarF。在内部,您仍然可以重新创建self.b,并且不必更改任何外部函数调用。这取决于具体情况 在本例中,您提供给
\uuuu init\uuu
的参数是为构造函数提供的,这可能意味着它们直接与对象本身相关,将来可能会使用。如果是这种情况,那么self
就很重要并且是必需的
如果它们只是临时的,可能只使用一次或用于设置其他内容,那么您应该完全可以使用非
self
变量。我同意它有助于可读性,如果您没有更永久地存储它们,则无需使用self
。如果您希望该类的其他方法可以轻松访问该变量,请使用self。如果不是这样,你当然可以在你的init方法中使用初始变量。在你的例子中有一个细微的区别。如果其中一个变量是带有getter和setter的属性,a
和self.a
可能不同,或者至少getter代码没有运行。这完全取决于您应该已经知道的类实现,所以没什么大不了的,除非将来它会改变。有些操作无法正常工作<代码>a+=1可能无法更新self.a
。但除此之外,任何一个选项都可以。另一个约定是,如果变量被设计为类的“私有”变量,或者换句话说,不被类外的任何对象访问,则声明(例如)a
为self.\u a
(前导下划线)。