rendre une classe appelable dans la même instance

class Foo(object):
    def tick(self):
        print("something")

class Bar(object):
    def __init__(self):
        self.foo = Foo()

    def tick(self):
        #Here's what I do....
        self.foo.tick()

        #here's what my goal would be
        self.foo()

b = Bar()
b.tick()

C'est essentiellement mon objectif. De ce que j'ai recueillis, je pouvais changer la tique fonction de __call__ et qui me permettrait de faire ce que je voulais. Un couple d'autres réponses a dit que cela ferait une nouvelle instance de l'objet, cela signifie qu'il aura recours à l'auto.foo mémoire? ou serait-il un tout nouvel objet nouvellement instancié? ou de faire une copie de soi-même.foo?

Aussi quelques inconvénients à ce qui peut ou peut ne pas se manifester eux-mêmes viennent à l'esprit. Pour un particulier le cadre de mon programme, je vérifie pour voir si l'objet a un __call__ pour déterminer si l'argument je suis de passage est une fonction ou une variable, et je ne pense pas vraiment que j'ai envie de permettre que, pour être appelé (même si, je suppose que la classe techniquement serait une fonction à ce point.) Est-il possible de distinguer entre une fonction et une rachetables de classe?

Est-il autre chose qui ferait de faire ce souhaitable (et est-il un pythonic façon de travailler?)? Ma prochaine pensée a été que, étant donné que d'autres variables préfixées avec __ ne peut pas être utilisé en dehors de leur classe, mais qui ne semble pas être le cas ici.

La mise en œuvre de __call__ serait pas créer de nouvelles instances de l'objet. Faire TheClass() crée une nouvelle instance mais some_instance() appelle simplement __call__.
Je suis le seul fait de mentionner cela dans le cas où vous n'avez pas pensé à elle -- Mais, avec le très simple code que vous avez ci-dessus, faisant Bar hériter de Foo semble être un bon choix -- bien sûr votre cas d'utilisation peuvent faire qu'il est pas un bon pari ...

OriginalL'auteur DanielCardin | 2013-01-29