Python __init ___:这违反惯例吗?

时间:2012-01-16 20:24:20

标签: python

我只是在学习python,我不确定__init__到底应该是什么。通常我只看到人们为每个arg写self.arg = arg

我只是想完全确定我的编码很好。如果我有这样的东西可以吗:

def __init__(self, arg1):
    self.arg1 = arg1
    self.var1 = 0
    self.var2 = 0
    self.var3 = 0
    self.var4 = 0
    self.var5 = None
    self.var6 = None
    self.initialize_vars()

这样做的原因是我需要调用几个函数来初始化这些值。我不确定为什么,但它似乎有点不对,我没有看到任何类似的例子,所以我想检查它是否可以。如果没有,我可以做什么呢?

另外,在__init__之后的另一个函数中引入self.var7是不是很糟糕?

3 个答案:

答案 0 :(得分:3)

这违反了惯例。如果你开始计算你的变量,你应该使用一个列表!是的,在__init__之外的其他地方引入新的实例变量是邪恶的。

答案 1 :(得分:3)

我说我同意好的样式代码在__init__中分配所有实例变量是因为可读性,也就是说,任何看过代码的人(甚至是你自己在几个月内) )不应该阅读整个类实现,以了解该类的变量和实例对象可以保存。

除此之外,我将initialize_vars方法重命名为_initialize_vars只是为了明确这是一个内部方法,不希望该类用户使用。

要完成上述信息,请查看PEP8

  
      
  • single_leading_underscore:weak"内部使用"指示器。
  •   

答案 2 :(得分:1)

如果可能的话,我会让initialize_vars返回变量,例如:

def __init__(self, arg1):
    self.arg1 = arg1
    self.var1,self.var2,self.var3,self.var4,self.var5,self.var6=self.initialize_vars()

def initialize_vars(self):
    a=1
    b=a*3
    #balh blah
    return(a,b,3,4,5,6)

然而,将initialize_vars的内容放在 init 中会更有意义吗?除非 init 在其中有很多其他逻辑,并且你不希望它变得太大。