__init__方法的注意事项



我只是想知道使用 init 方法通过一个接一个地调用类中的其余函数来设置变量是否被认为是非常不合适、只是混乱或非常规。我已经做了类似self.age = ch_age()之类的事情,其中ch_age是同一类中的一个函数,并以相同的方式设置更多变量,例如self.name=ch_name()等。另外,在 init 中专门提示用户输入以获取用于调用ch_age的参数怎么样?后者感觉有点不对劲,我必须说。欢迎任何意见、建议、告诫!

我总是喜欢懒惰:如果你需要初始化构造函数中的所有内容,你应该——在很多情况下,我在我的类中放了一个通用的"重置"方法。然后,您可以在 init 中调用该方法,并可以轻松地重新初始化类实例。

但是,如果您最初不需要这些变量,我觉得最好等到您真正需要它们时才初始化。

针对您的具体情况

class Blah1(object):
    def __init__(self):
        self.name=self.ch_name()
    def ch_name(self):
        return 'Ozzy'

您不妨使用属性装饰器。以下内容将具有相同的效果:

class Blah2(object):
    def __init__(self):
        pass
    @property
    def name():
        return 'Ozzy'

在上面的两个实现中,以下代码不应发出任何异常:

>>> b1 = Blah1()
>>> b2 = Blah2()
>>> assert b1.name == 'Ozzy'
>>> assert b2.name == 'Ozzy' 

如果要提供重置方法,它可能如下所示:

class Blah3(object):
    def __init__(self, name):
        self.reset(name)
    def reset(self, name):
        self.name = name

最新更新