2009-06-04 9 views
10

Jak jawnie uzyskać dostęp do nazwy w wbudowanym zakresie Pythona?Jawny dostęp do wbudowanego zakresu Pythona

Jedną z sytuacji, w której doszłam do tego, był moduł w module, na przykład foo, który miał otwartą funkcję. W innym module otwarta funkcja foo będzie dostępna jako foo.open, która działa dobrze. W samym foo, otwarte bloki wbudowane otwarte. W jaki sposób można uzyskać jawnie dostęp do wbudowanej wersji nazwy, takiej jak otwarta?

Jestem świadomy, że prawdopodobnie praktycznie złym pomysłem jest blokowanie dowolnych nazw wbudowanych, ale nadal jestem ciekawy, czy istnieje sposób na wyraźny dostęp do wbudowanego zakresu.

+0

+1: To bardzo zły pomysł, aby zastąpić nazwy wbudowanych. –

+0

Przyznaję, że otwieram poważny przedmiot, ale pytanie wydaje mi się właściwe. Wyjaśniam: napisałem funkcję uzyskiwania dostępu do pliku podobnie jak "open", przyjmowanie tych samych parametrów i zwracanie tego samego obiektu, ale obsługa przypadków, w których nie można otworzyć pliku w pożądanym (zwykle tylko do odczytu). Chciałbym uzyskać do niego dostęp tylko przez coś w stylu 'import my_scripts; f = moje_scripts.open (nazwa pliku, tryb) '. Ponieważ uważam, że nazwa 'my_scripts.open_' nie wygląda dobrze, czy byłoby to takie złe, skoro zakres jest wyraźnie podany? –

Odpowiedz

12

użytkowania __builtin__.

def open(): 
    pass 

import __builtin__ 

print open 
print __builtin__.open 

... daje ...

<function open at 0x011E8670>
<built-in function open>

+0

Punkt bonusowy, jeśli ktoś może mi powiedzieć, kiedy to było po raz pierwszy zawarte w pythonie. Dokumenty zwykle dobrze to mówią, ale nie wydaje się, żeby tak było: http://docs.python.org/library/__builtin__.html – amjoconn

+2

Długo, długo, jak widać ten wątek z 1992: http://www.python.org/search/hypermail/python-1992/0049.html (w tamtym czasie został nazwany wbudowanym zamiast __builtin__). Nie martwiłbym się o starsze wersje, które go nie obsługują ;-) – ChristopheD

+0

Teraz, gdy Python 3 jest już w pobliżu, zmienili __builtin__ na regularny moduł builtins: https://docs.python.org/3/library/builtins.html – Maciek

-2

To coś jak

__builtins__.open() 
+2

__builtins__ jest szczegółem implementacji CPython. Nie będę na tym polegać. –

+0

Prawda ... Pierwotnie zamierzałem zasugerować __builtin__, ale zapomniałem, że to był moduł: -/ –

Powiązane problemy