2012-05-30 16 views

Respuesta

17

Sí, es válido. La clase está definida por el momento en que crea un objeto y llama al método returnTest.

In [2]: x = Test() 

In [3]: y = x.returnTest() 

In [4]: y 
Out[4]: <__main__.Test instance at 0x1e36ef0> 

In [5]: 

Sin embargo, en los casos en que un método actúa como una fábrica, es posible que desee considerar el uso de la decoradora classmethod. Cuando la herencia y otras molestias se interponen, esto puede ayudar.

1

Sí, es válido. returnTest no se ejecutará hasta que se llame. No crea un bucle infinito, ya que el método no se invoca en el objeto recién creado.

0

Sí. Es un código python válido. Muchos lenguajes de programación permiten devolver una instancia de una clase que se está definiendo. Piense en el singleton patrón.

0

Sí, funciona pero parece que returnTest() es siempre la misma instancia de Test.

class Test: 
    def __init__(self): 
    self.number = 5 

    def returnTest(self): 
    return Test() 


t = Test() 
print t 
print t.returnTest() 
print t.returnTest() 


$ python te.py 
<__main__.Test instance at 0xb72bd28c> 
<__main__.Test instance at 0xb72bd40c> 
<__main__.Test instance at 0xb72bd40c> 

Esto es cierto para Python 2.7 y 3.2. @classmethod no hizo la diferencia. Curiosamente, PyPy devuelve una instancia diferente cada vez:

$ pypy te.py 
<__main__.Test instance at 0xb6dcc1dc> 
<__main__.Test instance at 0xb6dcc1f0> 
<__main__.Test instance at 0xb6dcc204> 
+10

Intente almacenar el resultado t.returnTest() porque si no lo hace, puede ser recolectado y puede parece a usted que la misma instancia se devuelve pero es solo la misma dirección, reciclada. – kasyc

+2

Eso es una gran idea. Almacenar los resultados en una lista continúa creando diferentes objetos. –

+1

Mi +1 a kasyc. Estoy usando Python 2.7.1 en Windows. Sin almacenar la referencia, también puedo observar la reutilización/reciclaje del espacio recogido de basura mencionado por kasyc. – pepr

Cuestiones relacionadas