2016-05-11 3 views
0

Ich bin es leid, MyLongAdvancedClassName._template einzugeben, um auf Klassenvariablen zuzugreifen. Sie sind manchmal Konstanten, aber nicht immer. Sie werden sagen, ich möchte im Falle von Konstanten Modul Globals verwenden. Aber ich möchte sie in der Nähe des Ortes der Nutzung, nicht am Anfang der Datei definiert haben. Ich mag auch keine Einheimischen, denn im Falle eines langen Strings werden Sie es bei jedem Anruf neu zuweisen.Ist es möglich, in Python indirekt auf den aktuellen Klassennamen zuzugreifen?

Ist es möglich, so etwas wie die folgenden Funktionen ausführen:

_c = MyLongAdvancedClassName 

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    def method(self): 
     print _c._template 
+2

Sie das tun können, aber Sie haben die '_c = ...' Zeile nach der Klassendefinition zu bewegen . – BrenBarn

+1

Ich habe immer nur 'self._template' verwendet, mit dem Verständnis, dass die Instanzvariable nicht ganz an die Klassenvariable gebunden ist. Diese Klassenvariablen sind für mich Konstanten, daher habe ich noch keine Probleme festgestellt, da ich sie nie neu zuweisen musste. Ich weiß nicht, ob das eine verpönte Übung ist. –

Antwort

3

Sie können in Python Verwendung von Selbst Schlüsselwort machen, anstatt die aktuellen Klassennamen verwenden.

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    def method(self): 
     print self._template 

Ich hoffe, es hilft.

2

Wahrscheinlich, was Sie suchen, ist die Verwendung von sich selbst (siehe San Antwort). Dies erfordert jedoch, dass Sie eine Instanz der Klasse haben. Wenn Sie es mit der Klasse tun möchte, selbst dann können Sie den Class Dekorateur wie folgt verwenden:

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    @classmethod 
    def method(cls): 
     print cls._template 
Verwandte Themen