为什么我需要括号来访问 python 中的 Solidity 合约变量?
Why do I need parenthesis to access a Solidity contract variable in python?
在 Solidity 合约中有如下声明:
contract Lottery is VRFConsumerBase, Ownable {
address payable[] public players;
...
...
在同一合同的其他地方,有一个分配如下:
....
....
recentWinner = players[someIndex];
....
....
}
deploy.pyPython脚本用于部署合约。部署合约的函数是:
def deploy_lottery():
Lottery.deploy(....)
....
....
部署并执行其他操作后...合同的 recentWinner 变量可从 python 脚本使用括号访问,如下所示:
def end_lottery():
print(f"{lottery.recentWinner()} is the winner!")
我的基本问题是,为什么要使用括号? recentWinner 不是 Lottery 合约中定义的函数。如果我 运行 没有 pa运行thesis 的脚本,我会得到以下输出。
<ContractCall 'recentWinner()'> is the winner!
Terminating local RPC client...
所以 pa运行 论文似乎是必要的。有人可以解释一下发生了什么吗?为什么我要把这个变量当作一个函数来检索它的值?如果您还可以向我指出一些相关的 posts/reading material 将不胜感激。谢谢!
EVM 没有 public 个变量,只有 public 个访问函数。
在幕后,Solidity 编译器会为您生成一个名为 recentWinner()
的函数。 This is called accessor or getter function。与 Java 等语言不同,函数没有 get
前缀。
在 Solidity 合约中有如下声明:
contract Lottery is VRFConsumerBase, Ownable {
address payable[] public players;
...
...
在同一合同的其他地方,有一个分配如下:
....
....
recentWinner = players[someIndex];
....
....
}
deploy.pyPython脚本用于部署合约。部署合约的函数是:
def deploy_lottery():
Lottery.deploy(....)
....
....
部署并执行其他操作后...合同的 recentWinner 变量可从 python 脚本使用括号访问,如下所示:
def end_lottery():
print(f"{lottery.recentWinner()} is the winner!")
我的基本问题是,为什么要使用括号? recentWinner 不是 Lottery 合约中定义的函数。如果我 运行 没有 pa运行thesis 的脚本,我会得到以下输出。
<ContractCall 'recentWinner()'> is the winner!
Terminating local RPC client...
所以 pa运行 论文似乎是必要的。有人可以解释一下发生了什么吗?为什么我要把这个变量当作一个函数来检索它的值?如果您还可以向我指出一些相关的 posts/reading material 将不胜感激。谢谢!
EVM 没有 public 个变量,只有 public 个访问函数。
在幕后,Solidity 编译器会为您生成一个名为 recentWinner()
的函数。 This is called accessor or getter function。与 Java 等语言不同,函数没有 get
前缀。