Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用在构造函数中返回类实例的函数_Python - Fatal编程技术网

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

Python 使用在构造函数中返回类实例的函数,python,Python,我有一个类,它的函数返回该类的另一个实例。因为该函数中已经内置了很多逻辑,所以我想在构造函数中使用它 下面是我尝试做的一个例子: class Hello(object): def __init__(self,name): self.name = name if name == "Carol": # trying to change the object self = self.append_hello("ni

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

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

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很高兴认识你


有一些明显的方法可以改变这个例子,让它达到我想要的效果。但是我希望能够在更复杂的情况下使用像
append\u hello()
这样的函数。有什么想法吗?

您可以通过定义而不是
\uuuu init\uuuu
来实现这一点


有关详细信息,请参见

这看起来可能会受到无限递归的攻击。如果删除或更改了对“Carol”的天真测试,它可能会继续调用和创建新对象

此外,我相信你是想写
self=self.append\u你好(“很高兴认识你”)


如前所述,将问候语字段作为类的成员将更有意义。这样就不需要将名称和问候语组合在一起并作为新对象返回。如果您的愿望是不可变的对象,请查找“写时复制”模式的示例。

写得好,即使
self=blah
工作正常,它也会无限重复出现……谢谢,这看起来正是我需要的