>>> import Cementerio>>> Kase_o = Cementerio.entidad("Kase",0,0)>>> Kase_o.pos<class Cementerio.pos at 0xb729450c>>>> Kase_o.pos.xTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: class pos has no attribute 'x'>>> Kase_o.pos.yTraceback (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) [GCC 4.9.2] on linux2Type "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.potenciaTraceback (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.potenciaTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: motor instance has no attribute 'motor'>>> auto.motor.potenciaTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: class motor has no attribute 'potencia'>>>
>>> iFord.motor.potenciaTraceback (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.potenciaTraceback (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.potenciaEn 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.potencia200>>>
Menudo despiste y lo de anidar clases es mas que todo para experimentar, consideraré lo de no usarlo por norma general.