Работа с классами (вложенными и т. Д.) Выглядит нелегко в Python , на удивление ! Следующая проблема возникла у меня недавно и заняла несколько часов (попытка, поиск ...) безуспешно. Я прочитал большинство ссылок по теме SO, но ни одна из них не указала на проблему, представленную здесь!
#------------------------------------ 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'
Где проблема в коде?
И
В обоих случаях кажется, что при инициализации B (A) A () не инициализируется. Как решить эту проблему? Обратите внимание, что термин A .__ init __ ()
, вызываемый внутри B () __ init __ ()
, не работает!
Обновления:
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()
, в результате чего:
Curvature 0.5 Curvature 0
то, что я искал.