tutorial soup library find_next_sibling python attributes object

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í.