做__init__方法的注意事项

时间:2013-09-06 01:16:38

标签: python function class initialization init

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

1 个答案:

答案 0 :(得分:2)

我总是喜欢懒惰:如果你需要初始化构造函数中的所有东西,你应该 - 在很多情况下,我在我的课堂上放了一个通用的“重置”方法。然后,您可以在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