这个B站的视频讲的self非常的清晰:Python面向对象的self究竟是什么?_哔哩哔哩_bilibili
这个B站的视频讲的_init_非常的清晰:Python类中 __init__ 的通俗解释是什么?_哔哩哔哩_bilibili
self
笔者之前学过C++,类似于C++,python首先定义一个类。如下图定义了一个TB类。
self实际上相当于是类的实例对象(下面会讲)。
在下面的图中,实例化了一个TB类 tb。
实例对象
像下面的代码,首先dog = Animal(),实例化了一个Animal类,然后dog.sleep()函数就是将dog代替代码中所有的self,然后发现要调用的是sleep方法,调用就好了。
_init_
是python中的构造函数,就是一开始实例化的时候就会执行一次。类似于c++。
还用这个TB类和它的调用举例子,下面实例化一个TB类tb。在实例化时候, tb = TB(dut),会传入参数dut,然后调用构造函数__init__(self, dut)。
然后接下来 self.dut = dut:让self.dut 等于传入的dut。
def __init__(self, dut):
self.dut = dut
self.log = logging.getLogger("cocotb.tb")
self.log.setLevel(logging.DEBUG)
# 创建一个时钟,周期是8ns
cocotb.fork(Clock(dut.clk, 8, units="ns").start())
# 它从仿真测试中的 dut(即设备测试对象)的 "s_phv" 前缀的接口发送数据
# self.mod_source = ModSource(ModBus.from_prefix(dut, "s_mod"), dut.clk, dut.rst)
self.phv_source = PhvSource(PhvBus.from_prefix(dut, "s_phv"), dut.clk, dut.rst)
# 用于模拟接收端,它从仿真中的 dut 的 "m_phv" 前缀的接口接收数据
self.phv_sink = PhvSink(PhvBus.from_prefix(dut, "m_phv"), dut.clk, dut.rst)