2010-07-26 13 views
0

J'ai une classe:python: accès var la suppression d'un

class A: 
    s = 'some string' 
    b = <SOME OTHER INSTANCE> 

maintenant je veux cette classe d'avoir la fonctionnalité d'une chaîne à chaque fois qu'il le peut. C'est-à-dire:

a = A() 
print a.b 

affichera la valeur de b. Mais je veux des fonctions qui attendent une chaîne (par exemple replace) pour fonctionner. Par exemple:

'aaaa'.replace('a', a) 

faire réellement:

'aaa'.replace('a', a.s) 

J'ai essayé overidding __get__ mais ce n'est pas correct.

Je vois que vous pouvez le faire en sous-classant str, mais est-il un moyen sans cela?

+2

Y at-il une raison que vous voulez _don't_ hériter de 'str'? Ce serait la bonne façon de faire cela. – katrielalex

+0

bien, comme le dit le titre de la question, c'est une question plus générale. Cette solution est bonne mais je pense que "access a var" sera utile. – Guy

Répondre

1

Remplacez __str__ ou __unicode__ pour définir la représentation sous forme de chaîne d'un objet (Python documentation).

+0

Cela n'aide pas. – Rivka

+0

Ensuite, utilisez la solution de Dave, qui devrait prendre en charge toute la fonctionnalité de chaîne. Ma solution ne fonctionne que pour un petit sous-ensemble. –

7

Si vous souhaitez que votre classe possède les fonctionnalités d'une chaîne, étendez simplement la classe de chaînes intégrée.

>>> class A(str): 
...  b = 'some other value' 
... 
>>> a = A('x') 
>>> a 
'x' 
>>> a.b 
'some other value' 
>>> 'aaa'.replace('a',a) 
'xxx'