python: créer une instance de la classe dans une autre classe (exemple générique)

Je suis en train d'apprendre python via le livre et internet et je suis bloqué sur une question de classe.

2 questions:

  1. Comment puis-je créer une instance d'une classe dans une autre (séparée) de la classe?
  2. Comment puis-je passer des variables entre la classe et le imbriquée(?) classe?

Lorsque j'essaie de créer une instance d'une classe dans une autre (séparée) de classe, je suis en mesure de le faire à l'intérieur d'une méthode. Voici le code:

import os

class FOO():
    def __init__(self):
        self.values = [2, 4, 6, 8]

    def do_something(self, x, y):
        os.system("clear")
        z = self.values[x] * self.values[y]
        print "%r * %r = %r" % (self.values[x], self.values[y], z)


class BAR():
    def __init__(self):
        pass

    def something_else(self, a, b):
        foo1 = FOO()
        foo1.do_something(a, b)

bar = BAR()
bar.something_else(1, 2)

Sera-ce, cependant, permettez-moi d'accéder à la classe FOO et c'est l'information dans la BARRE d'autres méthodes? Si oui, comment?

J'ai essayé ce qui suit, et vous avez une erreur:

import os

class FOO():
    def __init__(self):
        self.values = [2, 4, 6, 8]

    def do_something(self, x, y):
        os.system("clear")
        z = self.values[x] * self.values[y]
        print "%r * %r = %r" % (self.values[x], self.values[y], z)


class BAR():
    def __init__(self):
        foo1 = FOO()

    def something_else(self, a, b):
        foo1.do_something(a, b)

bar = BAR()
bar.something_else(1, 2)

Voici l'erreur:

Traceback (most recent call last):
File "cwic.py", line 22, in <module>
bar.something_else(1, 2)
File "cwic.py", line 19, in something_else
foo1.do_something(a, b)
NameError: global name 'foo1' is not defined

Je reçois la même erreur lorsque j'ai utilisé:

def __init__(self):
    self.foo1 = FOO()

Aussi, comment dois-je transmettre les "valeurs" d'une classe à l'autre?

S'il vous plaît laissez-moi savoir si mon approche générale et/ou de syntaxe sont mauvais. Toutes les suggestions de bienvenue (y compris les bons de lecture), comme je suis juste à l'apprentissage. Merci.

OriginalL'auteur dwstein | 2012-08-17