lasses aninhadas em Python
Lidar com classes (aninhadas etc) não parece fácil emPitã, surpreendentement! O problema a seguir me apareceu recentemente e levou várias horas (tente, pesquise ...) sem sucesso. Li a maioria dos links relacionados ao SO, mas nenhum deles apontou o problema aqui apresentad
#------------------------------------ class A: def __init__(self): self.a = 'a' print self.a class B(A): def __init__(self): self.b = 'b' A.a = 'a_b' print self.b, A.a #------------------------------------ class C: class A: def __init__(self): self.a = 'a' print self.a class B(A): def __init__(self): self.b = 'b' A.a = 'a_b' print self.b, A.a #------------------------------------ #------------------------------------ >>> c1 = A() a >>> c1.a 'a' >>> c2 = B() b >>> c2.a, c2.b ('a_b', 'b') >>> c3 = C() >>> c4 = c3.A() a >>> c4.a 'a' >>> c5 = c3.B() b a_b >>> c5.b 'b' >>> c5.a Traceback (most recent call last): File "", line 1, in AttributeError: B instance has no attribute 'a'
Onde está o problema no código? Nos dois casos, parece que quando B (A) é inicializado, A () não é inicializado. Qual é a solução para esse problema? Observe que o termoA.__init__()
sendo chamado dentro de B () __init__()
não funciona
Updates:
class Geometry: class Curve: def __init__(self,c=1): self.c = c #curvature parameter print 'Curvature %g'%self.c pass #some codes class Line(Curve): def __init__(self): Geometry.Curve.__init__(self,0) #the key point pass #some codes g = Geometry() C = g.Curve(0.5) L = g.Line()
o que resulta em
Curvature 0.5 Curvature 0
o que eu estava procurando.