我只是在学习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是不是很糟糕?
答案 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 在其中有很多其他逻辑,并且你不希望它变得太大。