2013-06-17 4 views

Antwort

28

Löschen Sie einfach den Namen, die eingebaute maskiert:

>>> set = 'oops' 
>>> set 
'oops' 
>>> del set 
>>> set 
<type 'set'> 

Sie können immer noch das Original durch den __builtins__ Namespace gebautet zuzugreifen; Verwenden Sie dies, wenn Sie die integrierte in außer Kraft setzen wollen, wollen aber trotzdem von der Überschreibung zum Original verschieben:

__builtins__ vom __builtin__ module bezogen ist (Python 2, beachten Sie den Mangel an s) oder die builtins module (Python 3, mit s, aber keine Unterstriche).

Wenn Sie Probleme mit der Lokalisierung des Maskierungsnamens haben, überprüfen Sie alle Namespaces von Ihrem aktuellen bis zu den eingebauten. Informationen dazu, welche Bereiche für Ihre aktuelle Situation gelten, finden Sie unter Short Description of the Scoping Rules?.

+1

Das ist ein phantastisch einfacher Trick, danke! – weronika

+0

Awesome, sehr nützlich bei der Verwendung von Python-Befehlszeile :) – razzak

+0

Funktioniert nicht für mich in Python 3. Ich bekomme Fehler, dass 'open' wird nicht definiert, wenn ich es lösche. –

6

Sie __builtin__ verwenden können:

>>> import __builtin__ 
>>> __builtin__.set 
<type 'set'> 

oder einfach (keine Importe erforderlich):

For Python 3:

>>> import builtins 
>>> builtins.set 
<class 'set'> 

Von docs:

CPython Implementierungsdetail: Benutzer sollten __builtins__ nicht berühren; es ist streng ein Implementierungsdetail. Benutzer, die die Werte im Namespace builtins überschreiben möchten, sollten das Modul __builtin__ (no 's') importieren und dessen Attribute entsprechend ändern.

+0

Nun und was mache ich, wenn die Methode 'builtins.open' geändert wurde? –

+0

@ TomášZato Dann ist es nicht möglich, es soweit ich weiß zurück zu bekommen. Wenn Ihre Anwendung etwas Ähnliches erfordert, sollten Sie einen Verweis auf solche Variablen beibehalten. –

Verwandte Themen