2017-05-31 1 views
0

Existe-t-il un moyen d'accéder à une variable de classe sans utiliser explicitement le nom de la classe, au cas où je déciderais de changer le nom de la classe plus tard?Utiliser le nom de classe pour accéder aux variables statiques

Quelque chose comme ça

static_variable = 'stuff' 

className = CLASS 

def method (self): 
    className.static_variable 

Est-ce possible d'une manière simple?

Réponse

self.static_variable ou __CLASS __. Static_variable

+1

Une raison particulière pour laquelle vous ne faites pas juste 'self.TABLE'? – user2357112

+0

Ou '__class __. TABLE', si vous comptez sur la variable de fermeture magique' __class__' de toute façon? – user2357112

+2

En règle de thump: Dans votre classe, vous ne devriez pas avoir besoin de connaître le nom de la classe (une exception: 'super' dans python-2.x et peut-être dans' __repr__' ou '__str__'). Chaque fois que vous trouvez que vous avez besoin du nom de votre classe, il y a probablement un moyen meilleur/plus facile. – MSeifert

Répondre

0

Pour tous ceux qui cherchent une réponse à cela, sans tenir compte pour l'instant que le mélange des variables statiques et d'instance est une bonne idée.

Il existe deux façons simples d'aborder cette question.

La première façon

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(__class__.static_variable) 

Deuxième façon

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(self.static_variable) 

Une variable d'instance est accessible via classe .static_variable, ou en utilisant self.static_variable aussi longtemps que d'une instance La variable n'a pas été définie pour self.static_variable quelque part dans le code.

utilisant l'auto rendrait ambiguë quant à savoir si vous accédez à une variable variable ou instance statique, donc ma façon préférée de le faire serait simplement précédez static_variable avec _class_ au lieu de ClassName.static_variable

+2

Veuillez ne plus les appeler des variables statiques. Ils sont appelés variables de classe; il n'y a rien de particulièrement statique à leur sujet. – chepner

+0

@chepner Peu importe ce que vous appelez, tant que vous savez ce qu'il fait. Je vais et viens entre matlab, Simulink, python, c, C++, et parfois java. Tous appellent cela le concept quelque chose de différent. Je ne peux pas insister assez sur le fait que le nom est sans importance. – Rethipher

+0

C'est très important. Par exemple, il existe une grande différence entre les méthodes statiques et les méthodes de classe. * Vous * pourriez savoir ce que vous entendez par variable statique; ne suppose pas que les autres le feront. – chepner