Empecé a aprender Python en los últimos días, y mientras exploro la programación orientada a objetos, tengo problemas. Estoy usando Eclipse mientras ejecuto el complemento pydev, estoy usando python 3.3 beta y estoy usando un sistema de Windows de 64 bits.¿Cómo extender apropiadamente otras clases en Python? (python v3.3)
Puedo inicializar una clase fina y usar cualquier método dentro de ella, siempre que no trate de extender la superclase (cada clase he codificado en un archivo fuente diferente) Por ejemplo, el siguiente código compila y funciona bien
class pythonSuper:
string1 = "hello"
def printS():
print pythonSuper.string1
y el código para acceder y ejecutarlo ...
from stackoverflow.questions import pythonSuper
class pythonSub:
pysuper = pythonSuper.pythonSuper()
pysuper.printS()
Como dije, eso funciona. El siguiente código no es
class pythonSuper: """Same superclass as above. unmodified, except for the spacing"""
string1 = "hello"
def printS(self):
print(pythonSuper.string1)
Bueno, eso no es del todo cierto. La superclase está absolutamente bien, al menos que yo sepa. Es la subclase que Weirds cabo
from stackoverflow.questions import pythonSuper
class pythonSub(pythonSuper):
pass
pythonObject = pythonSub()
pythonSub.pythonSuper.printS()
cuando la subclase se ejecuta Eclipse imprime este error
Traceback (most recent call last):
File "C:\Users\Anish\workspace\Python 3.3\stackoverflow\questions\pythonSub.py",
line 7, in <module>
class pythonSub(pythonSuper):
TypeError: module.__init__() takes at most 2 arguments (3 given)
no tengo idea de lo que está pasando. He estado aprendiendo Python de los tutoriales de newboston, pero están desactualizados (creo que su código de tutorial usa la versión 2.7 de Python). También codifica en IDLE, lo que significa que sus clases están todas contenidas en un archivo. El mío, sin embargo, está codificado en archivos propios. Eso significa que no tengo idea de si los errores de código que obtengo son el resultado de una sintaxis obsoleta o mi falta de conocimiento sobre este idioma. Pero yo divago. Si alguien puede publicar con una solución y/o explicación de por qué el código está fallando y qué podría hacer para solucionarlo. Una explicación sería preferida. Prefiero saber qué estoy haciendo mal para poder evitar y solucionar el problema en situaciones similares a las de copiar y pegar código y ver que funciona. Gracias, y espero sus respuestas
gracias, pero ahora está publicando este error Traza (última llamada más reciente): Archivo "C: \ Users \ Anish \ workspace \ Python 3.3 \ stackoverflow \ questions \ pythonSub.py ", línea 11, en pythonSub.pythonSuper.printS() AttributeError: type object 'pythonSub' no tiene atributo 'pythonSuper' y no quiero molestar a nadie, pero ¿por qué? –
pipsqueaker117
¿Por qué esperarías? es para? pythonSub está extendiendo pythonSuper, que no lo contiene. 'printS' es heredado, y usted accede directamente a través de su instancia de pythonSub. –
@DanielRoseman Lo siento, eso voló un poco sobre mi cabeza. ¿Podría explicarlo en , um, lenguaje novato? (Alternativamente, podría vincularme a una página donde podría aprender todo esto). – pipsqueaker117