2011-01-04 10 views
6

¿Los métodos python built-in están disponibles para referencia en un paquete en algún lugar?¿Los métodos incorporados de python están disponibles en un espacio de nombres alternativo en cualquier lugar?

Déjame explicarte. En mis primeros días (IER) de pitón hice un modelo de Django similar a esto:

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") 

ya que he necesitado para añadir un alojamiento a la misma. Esto me deja con este modelo:

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) 

Así que ahora en tiempo de ejecución se produce el error: TypeError: 'ForeignKey' object is not callable. Esto está sucediendo porque ForeignKey for property ha reemplazado la propiedad del identificador incorporado. Lo que me gustaría poder hacer es, en lugar de @property, usar @sys.property (o algo similar).

Nota: Ya conozco la solución alternativa de mover la propiedad del nombre por encima de la declaración del campo de propiedad. No estoy tan preocupado por este caso en particular, ya que soy la principal pregunta de las ubicaciones alternativas para hacer referencia a las incorporaciones de Python.

+0

Tal vez no lo entiendo, pero no puedes cambiar el nombre de su clase 'MyModel'' property' otra cosa, como '_property' o que- ¿Tienes? – martineau

+0

Esa no era la pregunta. –

+0

No, pero eso no hace que la mía sea irrelevante. – martineau

Respuesta

14

Use __builtin__.

def open(): 
    pass 

import __builtin__ 

print open 
print __builtin__.open 

Esto le da:

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

Si teclea todos los guiones bajos, también puedes hacer 'import __builtin__ como builtin' o algo similar. – kindall

+0

qué es un salvavidas :-) – Yeo

Cuestiones relacionadas