python - soup - ¿Cómo se establece programáticamente un atributo?
python soup find (3)
Por lo general, definimos clases para esto.
class XClass( object ):
def __init__( self ):
self.myAttr= None
x= XClass()
x.myAttr= ''magic''
x.myAttr
Sin embargo, puede, hasta cierto punto, hacer esto con las getattr
incorporadas de setattr
y getattr
. Sin embargo, no funcionan en instancias de object
directamente.
>>> a= object()
>>> setattr( a, ''hi'', ''mom'' )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: ''object'' object has no attribute ''hi''
Sin embargo, sí trabajan en todo tipo de clases simples.
class YClass( object ):
pass
y= YClass()
setattr( y, ''myAttr'', ''magic'' )
y.myAttr
Supongamos que tengo un objeto python x
una cadena s
, ¿cómo configuro el atributo s
en x
? Asi que:
>>> x = SomeObject()
>>> attr = ''myAttr''
>>> # magic goes here
>>> x.myAttr
''magic''
¿Cuál es la magia? El objetivo de esto, por cierto, es almacenar en caché las llamadas a x.__getattr__()
.
deja x ser un objeto, entonces puedes hacerlo de dos maneras
x.attr_name = s
setattr(x, ''attr_name'', s)
setattr(x, attr, ''magic'')
Para obtener ayuda sobre esto:
>>> help(setattr)
Help on built-in function setattr in module __builtin__:
setattr(...)
setattr(object, name, value)
Set a named attribute on an object; setattr(x, ''y'', v) is equivalent to
``x.y = v''''.
Editar: Sin embargo, debe observar (como se señala en un comentario) que no puede hacer eso en una instancia "pura" de object
. Pero es probable que tengas una subclase simple de objeto donde funcione bien. Recomiendo encarecidamente al OP que nunca haga instancias de objetos así.