2010-07-16 3 views

Répondre

3

Tout est un objet de première classe en python, donc l'idée devrait fonctionner (la syntaxe est désactivée), bien que je suggère de créer function sa propre classe avec des propriétés, puis de l'utiliser dans MyClass, sauf si vous avez une très bonne raison de ne pas le faire.

Je tiens à souligner que je suppose que vous voulez function retourner une chose indicable, ne pas avoir une liste indicative des fonctions. C'est une implémentation différente (peut également être fait, si.)

Par exemple, une chose subscriptable (tu aurais pu faire juste un list aussi):

# python 

> class FooFunc(list): 
> pass 
> class Foo: 
> foofunc = FooFunc() 
> f = Foo() 
> f.foofunc.append("bar") 
> f.foofunc[0] 
'bar' 
+0

"devrait fonctionner"? Pourquoi deviner? essayez-le. –

+0

@ned: je voulais dire que le concept est bien, et a négligé de dire que la syntaxe était désactivée. mis à jour et avec exemple. – eruciform

+0

Mais dans ce cas, la fonction elle-même ne contient pas l'appel __getitem__. Ici foofunc est une référence à une sous-classe de liste. – McJeff

1

Nope, qui ne fonctionnera pas. Considérez la logique de descripteur sous-jacente appelée lorsque vous accédez à un attribut qui a été décoré comme @property. La méthode get doit renvoyer une valeur qui sera utilisée comme propriété calculée function. Dans ce cas, la fonction ne retourne rien (valeur implicite None pour la propriété). Votre indice tentera alors d'indexer None et de grimper.

Vous pouvez renvoyer un objet de function qui prenait en charge la méthode dunder __getitem__, cependant. Cela fonctionnerait syntaxiquement de la même manière.

0

Si vous essayez votre code (après avoir corrigé le C in Class), vous verrez qu'il génère une erreur: "TypeError: l'objet 'NoneType' est insubmersible".

Je pense que votre meilleur pari est de créer une classe avec un __getitem__, et de définir function à une instance de cette classe. Y a-t-il une raison pour laquelle cela doit être si compliqué?

Questions connexes