¿Cuál es la mejor manera de personalizar la cadena de adquisición de un objeto Zope?
-
28-10-2019 - |
Pregunta
Esencialmente, quiero verificar otro objeto para ver si se establece un atributo antes de procesar los elementos en object.aq_chain.
Parece que no puedo evitar la recursión infinita al anular GetAttr y GetAttribute.
ACTUALIZAR
Ejemplo:
import ExtensionClass, Acquisition
class Folder(ExtensionClass.Base): pass
class File(Acquisition.Implicit): pass
parent1 = Folder()
parent1.foo = 1
parent2 = Folder()
parent2.foo = 2
child = File()
parent1.child = child
child.otherparent = parent2
print parent1.child.foo # prints 1, but i want it to print 2
En caso de que no se vea sin decir, hay una API en la que estoy tratando de trabajar.
Solución
Para construir cadenas de adquisición, debe usar el __of__
Método del envoltorio de adquisición:
>>> wrapped = child.__of__(parent2)
>>> assert wrapped.aq_parent is parent2
True
Ver el Capítulo de adquisición de la documentación de Zope2 para más información.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow