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
工作正常,它也会无限重复出现……谢谢,这看起来正是我需要的