0

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

4

1 回答 1

3

我总是喜欢懒惰:如果你需要在构造函数中初始化所有东西,你应该——在很多情况下,我在我的类中放置了一个通用的“reset”方法。然后您可以在 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
于 2013-09-06T01:21:59.933 回答