2016-10-10 1 views
-1

J'ai une très grosse chaîne, qui me donne accès à mon dictionnaire dans un autre dictionnaire d'une autre classe.Les variables de Can ont des synonymes?

self.app_data.ip_table[self.app_data.cfg.MY_IP]['tasks'] 

Si je cette dict dans l'ordre des chaînes, je peux écrire quelque chose comme ça (je pense):

with self.app_data: 
    ... 

Mais j'utiliser cette variable dans différentes lignes dans tous les fichiers, je peux N'utilisez pas l'instruction with. Que je pense, en C++, nous pouvons utiliser quelque chose comme #define VAR very.long.access.path.to.variable.

Y at-il quelque chose comme ça dans python? Puis-je avoir un nom d'accès variable plus court?

P.S. Cette variable de nom d'accès long change avec un autre thread. Je n'ai pas besoin de l'assigner à une autre variable. Je suis à la recherche de texte plus court pour le code

+4

'a = self.app_data' ...? – deceze

+2

Lisez la documentation sur 'with', ce n'est pas ce que vous pensez ... Pour faire un synonyme, il suffit d'assigner la variable à une autre variable avec un nom plus court, comme' a = very.long.access.path.to.variable 'et utiliser' a', alors. – mguijarr

+0

@deceze ça peut aider, mais je dois réattribuer la variable 'a' à chaque fois, coz cette variable change avec un autre thread – gek0n

Répondre

1

Utiliser des propriétés peut-être?

class C: 
    def __init__(self, ...): 
     self.app_data = get_app_data() 

    @property 
    def var(self): 
     return self.app_data.very['long'].path.here 

    @var.setter 
    def var(self, value): 
     self.app_data.very['long'].path.here = value 

c = C() 
print c.var 
c.var = 1337 

vous pouvez également créer var_threadsafe propriété avec un mutex à l'intérieur si vous attendez que ces données soient lues/écrites dans plusieurs threads.