gpt4 book ai didi

带有初始化程序的 Python 子类化过程

转载 作者:太空狗 更新时间:2023-10-29 21:22:09 25 4
gpt4 key购买 nike

我正在尝试创建一个对象作为一个新进程。如果我给类一个初始化程序,程序就会显示错误。

代码

import multiprocessing as mp 
import time

class My_class(mp.Process):
def __init__(self):
self.name = "Hello "+self.name
self.num = 20

def run(self):
print self.name, "created and waiting for", str(self.num), "seconds"
time.sleep(self.num)
print self.name, "exiting"

if __name__ == '__main__':
print 'main started'
p1=My_class()
p2=My_class()
p1.start()
p2.start()
print 'main exited'

错误

File "/usr/lib64/python2.7/multiprocessing/process.py", line 120, in start
assert self._popen is None, 'cannot start a process twice'
AttributeError: 'My_class' object has no attribute '_popen'

但是当向初始化程序插入 super(My_class, self).__init__() 行时,程序运行正常。

最终构造函数:

def __init__(self):
super(My_class, self).__init__()
self.name = "Hello "+self.name
self.num = 20

我在不同的上下文中找到该行并在此处尝试,代码运行良好。

谁能解释一下上面初始化程序中 super(My_class, self).__init__() 行的作用是什么?

最佳答案

当您在此处添加自己的 __init__() 时,您将覆盖父类(super class)中的 __init__()。然而,父类(super class)通常(在本例中)在其 __init__() 中有一些它需要的东西。因此,您要么必须重新创建该功能(例如,按照您的错误中所述初始化 _popen 等),要么在您的新构造函数中调用父类(super class)构造函数 within 使用super(My_class, self).__init__()(或 Python 3 中的 super().__init__())。

关于带有初始化程序的 Python 子类化过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com