关于Python代码中setNextPin()函数的运行逻辑疑问
注意你粘贴的代码存在归属错误:
setNextPin方法实际属于双输入逻辑门(与门、或门等继承自LogicGate的二元门类),是粘贴时误放到了Connector类定义中,否则代码无法正常运行,以下解析基于正确的类归属展开。
1. setNextPin中两个参数的指代
- 函数内的
self:指代当前被调用该方法的目标逻辑门实例,也就是构造Connector时传入的tgate,这个实例自带pinA、pinB两个输入引脚属性。 source参数:指代调用方法时传入的**Connector连接器实例**,你可以看Connector的__init__方法里有一行tgate.setNextPin(self),这里传入的self就是刚创建的连接器实例,也就是source的实参。
2. 引脚值与连接器的绑定逻辑
整个流程是固定的:
- 构造
Connector时需要传入两个参数:上游输出门fgate、下游输入门tgate,连接器会先把两个门的引用存在自己的属性里。 - 连接器自动调用下游门的
setNextPin方法,把自己作为source传入,下游门会按顺序把这个连接器绑定到第一个空置的输入引脚:先检查pinA为空就绑定到pinA,否则绑定到pinB,两个都满就抛出异常。 - 后续下游门需要计算输出时,会先读取引脚绑定的连接器:如果引脚存的是
Connector实例,就调用连接器的getFrom()方法拿到上游门,再调用上游门的getOutput()方法拿到实际的输入值,不需要手动给连接器存值,连接器只是作为上下游门的中转桥梁存在。
内容的提问来源于stack exchange,提问作者Sart-hack
相关产品推荐
相关产品推荐

