вложенные классы в Python

Работа с классами (вложенными и т. Д.) Выглядит нелегко в 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

то, что я искал.

6
задан Developer 8 January 2012 в 07:55
поделиться