>>> import Cementerio
>>> Kase_o = Cementerio.entidad("Kase",0,0)
>>> Kase_o.pos
<class Cementerio.pos at 0xb729450c>
>>> Kase_o.pos.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class pos has no attribute 'x'
>>> Kase_o.pos.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class pos has no attribute 'y'
>>>
self.posicion = self.pos(x,y)
self.pos = self.pos(x,y)
Python 2.7.9 (default, Aug 13 2016, 16:41:35)Nada, pero bueno, a menos lo que ha dicho Zarkrosh me ha servido, es la unica forma que he tenido de ejecutar mi programa.
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class auto:
... class motor:
... def __init__(self,potencia):
... self.potencia = potencia
... def __init__(self,potencia,marca):
... self.marca = marca
... self.potencia = self.motor(potencia)
...
>>> auto
<class __main__.auto at 0xb72e047c>
>>> auto.motor
<class __main__.motor at 0xb72e041c>
>>> iFord = auto(100,"Ford")
>>> iFord.marca
'Ford'
>>> iFord.motor.potencia
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class motor has no attribute 'potencia'
>>> iFord.motor
<class __main__.motor at 0xb72e041c>
>>> iFord.motor(200)
<__main__.motor instance at 0xb72e7d8c>
>>> iFord = iFord.motor(200)
>>> iFord.motor.potencia
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: motor instance has no attribute 'motor'
>>> auto.motor.potencia
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class motor has no attribute 'potencia'
>>>
>>> iFord.motor.potencia
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class motor has no attribute 'potencia'
class auto:
def __init__(self,potencia,marca):
self.marca = marca
***self.potencia = self.motor(potencia)***
Citar>>> iFord.motor.potencia
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class motor has no attribute 'potencia'
Ten en cuenta que a la instancia de motor dentro de auto la has llamad "potencia":Código: [Seleccionar]class auto:
def __init__(self,potencia,marca):
self.marca = marca
***self.potencia = self.motor(potencia)***
Tendrías que haber hecho:
iFord.potencia.potencia
En cualquier caso, anidar clases no es muy útil salvo para desambiguar (si tuvieras que representar un coche completamente, seguramente necesitarías diferenciar coche.motor de coche.elevalunas.motor, por poner un ejemplo fácil de ver), y para ciertos usos bastante avanzados. Un ejemplo son los iteradores de C++, que se definen en función a tipos parametrizados. Y entonces, no es lo mismo std::vector<int>::iterator que std::vector<std::string>::iterator.
Está bien saber que existen clases anidadas, pero mejor no usarlas, salvo que tengas un buen motivo y sepas lo que estás haciendo.
>>> class auto:
... class motor:
... def __init__(self,potencia):
... self.potencia = potencia
... def __init__(self,marca,potencia):
... self.marca = marca
... self.imotor = self.motor(potencia)
...
>>> iFord = auto("Ford",200)
>>> iFord.marca
'Ford'
>>> iFord.imotor
<__main__.motor instance at 0xb731abec>
>>> iFord.imotor.potencia
200
>>>
Menudo despiste y lo de anidar clases es mas que todo para experimentar, consideraré lo de no usarlo por norma general.Tampoco pasa nada si te apetece usarlo, pero no te va a aportar mucho, salvo en los casos que he comentado.