如何调用基类__init__自我?

问题描述 投票:0回答:2

如何使用self.__init__重新初始化基类?

在下面的例子中我的目标是要继承逸康这是一个插座衍生的驱动程序。这种处理连接/断开。如果它断开,我们需要使用__init__重新初始化,但它似乎是指在comDriver时self.__init__被调用。

如何正确初始化超考虑到这一点?

(其他:self.__init__在连接()是指comDriver,不逸康像它应该)

下面是一个简单的例子来重现在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)
python python-3.x
2个回答
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()避免在子类名称冲突。


0
投票

在连接自.__ init__()是指comDriver,不逸康像它应该

这并不完全保持 - self指调用对象,这是comDriver。如果你想不管是什么类扩展它来打电话到__init__方法上eComm,你将有明确的参考。

eComm.__init__(self)

但是,其他的答案和评论是正确的,这不是一个很好的利用__init__的。

© www.soinside.com 2019 - 2024. All rights reserved.