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