2011-01-04 13 views
6

Czy możliwe jest odwoływanie się do Pythona built-in w pakiecie?Czy wbudowane metody Pythona są dostępne w alternatywnej przestrzeni nazw?

Pozwól mi wyjaśnić. W moim początku (ier) dni od pytona zrobiłem django model podobny do tego:

class MyModel(models.Model): 
    first_name = models.CharField(max_length=100, null=True, blank=True) 
    last_name = models.CharField(max_length=100, null=True, blank=True) 
    property = models.ForeignKey("Property") 

Mam ponieważ potrzebne, aby dodać obiekt do niego. To pozostawia mnie z tego modelu:

class MyModel(models.Model): 
    first_name = models.CharField(max_length=100, null=True, blank=True) 
    last_name = models.CharField(max_length=100, null=True, blank=True) 
    property = models.ForeignKey("Property") 

    @property 
    def name(self): 
     return "{} {}".format(first_name, last_name) 

Więc teraz przy starcie pojawia się błąd: TypeError: 'ForeignKey' object is not callable. Dzieje się tak, ponieważ właściwość ForeignKey dla właściwości zastąpiła wbudowaną właściwość identyfikatora. To, co chciałbym móc zrobić, to zamiast @property użyć @sys.property (lub czegoś podobnego).

Uwaga: Już wiem o obejściu problemu przeniesienia własności nazwy powyżej deklaracji pola własności. Nie jestem tak zaniepokojony tym szczególnym przypadkiem, ponieważ jestem głównym pytaniem o alternatywne lokalizacje dla odniesienia do wbudowanych pytonów.

+0

Być może nie rozumiem, ale nie można po prostu zmienić nazwę '' klasę MyModel' coś property' innego, jak '_property' lub what- czy ty? – martineau

+0

To nie było pytanie. –

+0

Nie, ale to nie czyni mnie bez znaczenia. – martineau

Odpowiedz

14

Użyj __builtin__.

def open(): 
    pass 

import __builtin__ 

print open 
print __builtin__.open 

To daje:

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

Jeśli wpisujesz wszystkie te podkreślenia, możesz również zrobić "import __builtin__ jako wbudowany" lub temu podobne. – kindall

+0

co za ratownik :-) – Yeo

Powiązane problemy