2011-06-10 49 views
21

Pregunta simple, pero como soy nuevo en python, viene de php, obtengo algunos errores en él.
Tengo la siguiente clase simple:Obtiene un atributo de objeto

User(object) 
     fullName = "John Doe" 

user = User() 

En PHP que podía hacer lo siguiente:

$param = 'fullName'; 
echo $user->$param; // return John Doe 

¿Cómo se hace esto en Python?

Respuesta

55

Para acceder campo o método de un punto el uso de objetos .:

user = User() 
print user.fullName 

Si el nombre del campo se define en tiempo de ejecución, utilice edifi getattr función:

field_name = "fullName" 
print getattr(user, field_name) # prints content of user.fullName 
1

Puede haga lo siguiente:

class User(object): 
    fullName = "John Doe" 

    def __init__(self, name): 
     self.SName = name 

    def print_names(self): 
     print "Names: full name: '%s', name: '%s'" % (self.fullName, self.SName) 

user = User('Test Name') 

user.fullName # "John Doe" 
user.SName # 'Test Name' 
user.print_names() # will print you Names: full name: 'John Doe', name: 'Test Name' 

Por ejemplo, cualquier atributo de objeto podría ser recuperado usando istance.

+0

Pero el PO tiene una cadena. – rubik

2

Si tendrá que obtener la propiedad de un objeto de forma dinámica, utilice la función getattr(): getattr(user, "fullName") - o para elaborar:

user = User() 
property = "fullName" 
name = getattr(user, property) 

De lo contrario sólo tiene que utilizar user.fullName.

13

Uso getattr si tiene un atributo en forma de cadena:

>>> class User(object): 
     name = 'John' 

>>> u = User() 
>>> param = 'name' 
>>> getattr(u, param) 
'John' 

De lo contrario usar el punto .:

>>> class User(object): 
     name = 'John' 

>>> u = User() 
>>> u.name 
'John' 
Cuestiones relacionadas