Wie fügt man Python * class * ein Attribut hinzu, das _nicht_ geerbt ist?

9

Ich muss in der Lage sein, eine Markierung für eine Klasse ( nicht für eine Instanz einer Klasse) festzulegen, die für eine Unterklasse nicht sichtbar ist. Die Frage ist, ist es möglich, und wie würde ich es tun, wenn es ist?

Zur Veranschaulichung möchte ich etwas wie folgt haben:

%Vor%

... wobei hasattr(Master, "__flag__") True für Master zurückgeben soll, aber False für Child . Ist das möglich? Wenn das so ist, wie? Ich möchte __flag__ nicht explizit in jedem Kind auf false setzen müssen.

Mein ursprünglicher Gedanke war, __metaclass__ zu definieren, aber ich habe nicht den Luxus, das zu tun, weil Master von anderen Klassen und Metaklassen erbt, die ich nicht kontrolliere und die privat sind.

Letztendlich möchte ich einen Dekorateur schreiben, damit ich etwas tun kann wie:

%Vor%     
Bryan Oakley 19.06.2015, 18:46
quelle

1 Antwort

4

Sie waren sehr nah dran:

%Vor%

Zwei führende Unterstriche ohne nachfolgende Unterstriche rufen Name Mangling auf, sodass das Attribut den Namen _Master__flag hat. Daher, wenn Sie überprüfen:

%Vor%

es wird nur ist True für Master , nicht Child .

    
jonrsharpe 19.06.2015, 19:52
quelle

Tags und Links