如何使用self.__init__
重新初始化基类?
在下面的示例中,我的目标是继承eComm,它是套接字派生的驱动程序。这处理连接/断开连接。如果断开连接,则需要使用__init__
重新初始化它,但是在调用self.__init__
时,它似乎是指comDriver。
如何正确初始化超类以允许这样做?
(否则,connect()中的self.__init__
指的是comDriver,而不是eComm所指)
以下是重现Python 3.x中错误的简单案例
class eComm():
def __init__(self):
self.s = "example object"
self.initialized = True
self.connected = False
def connect(self, IP_ADDRESS, PORT):
if self.initialized:
print(IP_ADDRESS, PORT)
else:
print("REINITIALIZING")
self.__init__()
self.connected = True
return(True)
class comDriver(eComm):
def __init__(self, IP_ADDRESS, PORT):
self.IP = IP_ADDRESS
self.PORT = PORT
super().__init__()
pass
def getTemp(self):
print("EXAMPLE FUNCTION")
return(1)
x = comDriver("192", 7)
x.connect("161", 6)
x.initialized = False
x.connect("111", 5)
答案 0 :(得分:2)
IMO,您错误地使用了特殊方法__init__
。它旨在初始化Python对象,而不是该范围之外的任何对象。
根据您的意图,我建议您创建一个单独的初始化函数,然后从__init__
进行调用。这是一个示例:
class eComm():
def __init__(self):
self.initialize_eComm()
def initialize_eComm(self):
self.s = "example object"
self.initialized = True
self.connected = False
然后您可以将self.__init__()
替换为self.initialize_eComm()
,以避免子类中的名称冲突。
答案 1 :(得分:0)
self .__ init__在connect()中是指comDriver,而不是像它应该的eComm
这不太成立-self
指向调用对象,即comDriver
。如果您想调用__init__
上的eComm
方法,而不管它扩展了什么类,则必须显式引用。
eComm.__init__(self)
但是,其他答案和评论是正确的,因为这不是__init__
的好用法。