使用一个在构造函数中返回类实例的函数

时间:2014-05-24 17:48:44

标签: python

我有一个带有函数的类,它返回该类的另一个实例。因为很多逻辑已经内置到该函数中,所以我想在构造函数中使用它。

以下是我尝试做的一个例子:

class Hello(object):
    def __init__(self,name):
        self.name = name
        if name == "Carol":
            # trying to change the object
            self = self.append_hello("nice to meet you")

    def say_hi(self):
        print "Hi, " + self.name

    def append_hello(self,string):
        # This function returns a "Hello" class instance
        return HelloObject(self.name + " " + string)

输出结果如何:

>>> h1 = Hello("Eric")
>>> h1.say_hi()
Hi, Eric
>>> h2 = h1.append_hello("how are you?")
>>> h2.say_hi()
Hi, Eric how are you?
>>> h1.say_hi()
Hi, Eric

但是当我跑步时:

>>> h3 = Hello("Carol")
>>> h3.say_hi()

如果我希望对象与众不同并得到Hi, Carol,我会得到Hi, Carol nice to meet you

有明显的方法来改变这个例子,所以它可以做我想要的。但我希望能够使用像append_hello()这样的函数来处理更复杂的情况。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以通过定义__new__而不是__init__来完成此操作。

有关详细信息,请参阅Python's use of __new__ and __init__?

答案 1 :(得分:0)

看起来它可能容易受到无限递归的影响。如果对'" Carol"进行天真的测试删除或更改它可以继续调用和创建新对象。

此外,我相信你打算写self = self.append_hello("nice to meet you")

正如所写,将问候语字段作为班级成员更有意义。然后不需要组合名称和问候语并作为新对象返回。如果您的需求是不可变的对象,请查看写入时复制模式的示例。