Python 我应该为所有类方法使用self.variable吗?

Python 我应该为所有类方法使用self.variable吗?,python,class,Python,Class,我想搜索是否有类似的问题,但我甚至不知道搜索什么关键字 我想为这篇文章简化一个类似这样的类: 类别MyClass: def u_init__self,a,b=无: 如果b为无: b=0 self.a=a self.b=b def do_calcself,常数=无: 如果const为None: 常数=1 abc=self.a*self.b*self.const self.const=const self.abc=abc self.result=self.abc**2+self.b*self.con

我想搜索是否有类似的问题,但我甚至不知道搜索什么关键字

我想为这篇文章简化一个类似这样的类:

类别MyClass: def u_init__self,a,b=无: 如果b为无: b=0 self.a=a self.b=b def do_calcself,常数=无: 如果const为None: 常数=1 abc=self.a*self.b*self.const self.const=const self.abc=abc self.result=self.abc**2+self.b*self.const**2+2*self.abc+self.const 我的问题是我是否可以将do_calc部分的最后一行缩短为

self.result=abc**2+self.b*常数**2+2*abc+常数 在我的真实代码中,如果我使用self,最后一行会变得太长。在所有变量前面,所以我希望在不丢失可读性的情况下缩短它们。当然,代码应该可以工作,但我想知道这样做是否有任何潜在的问题。我有一种感觉,使用self更好。一直以来,但我发现到目前为止我还没有具体的理由

您对do_calc的定义过长,因为不需要将abc或const存储为实例属性。但是,您可以将self.a和self.b保存为临时局部变量,以缩短计算时间

def do_calc(self, const=1):  # 1 is immutable, so it's safe to use as a default
    a = self.a  # Optional, you can refer directly to self.a below
    b = self.b  # Optional, you can refer directly to self.b below
    abc = a * b * const
    self.result =  abc**2 + b*const**2 + 2*abc + const
另一个问题是do_calc是应该将该结果缓存在实例本身中,还是只返回计算出的值

def do_calc(self, const=1):
    a = self.a
    b = self.b
    abc = a * b * const
    return abc**2 + b*const**2 + 2*abc + const

当您在init中执行赋值时,a,b只需要self。既然范围是本地的,为什么要在do_calc中使用它?我相信您需要更多地了解实例变量!此外,如果**将被大量使用,我宁愿制作一个函数平方来获取值并进行计算job@NoobEditor谢谢你的回复!在代码的后面部分,self.const再次被使用,因此我不得不做一些类似self.const=const的事情。我想知道的是,即使在do_calc中,我是否应该始终使用self.const而不是const,从您的回答来看,我认为答案是否定的。谢谢您:谢谢您的回复!很抱歉,我没有指定self.const将用于其他方法,因此我需要将其保存到self。但无论如何,我知道我至少可以把self放在do_calc中,而且a=self.a和const=1作为默认值看起来更好。非常感谢你!我认为如果在其他地方使用a*b*const,应该有一个单独的方法来设置self.const,或者它应该是u_init_u___的一个参数,就像a和b一样,因为它不是专门用来计算的。