web3.py 和布朗尼:为什么 Contract.Struct_array(n) 有效而 Contract.Struct_array[n] 无效?

web3.py and brownie: why does Contract.Struct_array(n) work but Contract.Struct_array[n] doesn't?

里面Contract.sol我已经定义了

struct id {
   string name;
   uint num;
}

id[] public id_array;
.
.
.

在 python 文件中,设 C_adrsContract.sol 的已部署实例的地址。我想打印已部署实例的 id_array 的第 0 个条目。出于某种原因,以下给出了所需的结果。

print(C_adrs.id_array(0))

另一方面,下面给出 'ContractCall' object is not subscriptable

print(C_adrs.id_array[0])

这是怎么回事?我认为方括号应该访问整个数组。

嗯,是的,在 python 中,您可以使用 [] 访问数组索引,但这是一个函数而不是数组,至少对于 python,python 不要不知道 id_array 是一个数组,因为它是一个接收参数的函数,并且 returns 它从区块链获得的东西,事实上,如果你查看你的合同的 abi 并检查什么是 id_array 它将是一个接收 uint256 和 return uint256

的函数