Herencia múltiple y linealización

Hola a todos. Estoy viendo la herencia múltiple en Solidity. Encontré este ejemplo dentro de su documentación, pero no es lo suficientemente comprensible para mí.

Alguien puede explicar esta oración con más detalle:

La razón de esto es que C solicita que X anule A (especificando A, X en este orden), pero A mismo solicita anular X, lo cual es una contradicción que no se puede resolver.

Mi pregunta es por qué C solicita a X que anule A, es decir, ¿qué significa exactamente este orden de herencia?

    pragma solidity ^0.4.0;

     contract X {}
     contract A is X {}
     contract C is A, X {}

Respuestas (2)

Después de investigar encontré:

Con la herencia múltiple, hay un problema causado por el problema del diamante. Solidity resuelve este problema como Python.

Aquí hay dos enlaces que describen este problema en detalle: https://docs.python.org/2/tutorial/classes.html#instance-objects https://www.python.org/download/releases/2.3/mro/

Entonces, el orden de la herencia es importante para evitar el problema de Diamond. El orden debe ser: desde las clases en el nivel superior de herencia hasta las clases en los niveles inferiores

Para completar el enlace a la documentación de solidity solidity.readthedocs.io/en/develop/…
Solo una pequeña observación para evitar trampas: en Python, las clases base se buscan de izquierda a derecha. En Solidity es de derecha a izquierda.

Se explica mejor en los documentos de solidez sobre herencia múltiple y linealización :

Debe enumerar los contratos de base directos en el orden de "más parecido a la base" a "más derivado". Tenga en cuenta que este orden es el inverso al utilizado en Python.

Otra forma simplificada de explicar esto es que cuando se llama a una función que se define varias veces en diferentes contratos, las bases dadas se buscan de derecha a izquierda (de izquierda a derecha en Python) primero en profundidad, deteniéndose en la primera coincidencia. . Si ya se ha buscado un contrato base, se omite.