Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将基类init称为self?_Python_Python 3.x - Fatal编程技术网

Python 如何将基类init称为self?

Python 如何将基类init称为self?,python,python-3.x,Python,Python 3.x,如何使用self.\uuu init\uuu重新初始化基类 在下面的示例中,我的目标是继承eComm,它是一个套接字派生的驱动程序。这将处理连接/断开。如果它断开连接,我们需要使用\uuuuu init\uuuuu重新初始化它,但是调用self.\uuuu init\uuuu时,它似乎引用了comDriver 如何正确初始化超类以实现这一点 (否则:self.\uuuuu init\uuuuu在connect()中指的是comDriver,而不是它应该指的eComm) 下面是一个在Python3

如何使用
self.\uuu init\uuu
重新初始化基类


在下面的示例中,我的目标是继承eComm,它是一个套接字派生的驱动程序。这将处理连接/断开。如果它断开连接,我们需要使用
\uuuuu init\uuuuu
重新初始化它,但是调用
self.\uuuu init\uuuu
时,它似乎引用了comDriver

如何正确初始化超类以实现这一点

(否则:
self.\uuuuu init\uuuuu
在connect()中指的是comDriver,而不是它应该指的eComm)

下面是一个在Python3.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)

在我看来,您错误地使用了特殊方法
\uuuu init\uuuu
。它旨在初始化Python对象,而不是该范围之外的任何对象

出于您的意图,我建议您创建一个单独的初始值设定项函数,并从
\uuuu init\uuuu
调用它。下面是一个例子:

class eComm():
定义初始化(自):
self.initialize_eComm()
def初始化_eComm(自身):
self.s=“示例对象”
self.initialized=True
self.connected=False

然后,您可以用
self.initialize\eComm()
替换
self.\uuuu init\uuuu()
,以避免子类中的名称冲突。

IMO您错误地使用了特殊方法
\uu init\uuuu
。它旨在初始化Python对象,而不是该范围之外的任何对象

出于您的意图,我建议您创建一个单独的初始值设定项函数,并从
\uuuu init\uuuu
调用它。下面是一个例子:

class eComm():
定义初始化(自):
self.initialize_eComm()
def初始化_eComm(自身):
self.s=“示例对象”
self.initialized=True
self.connected=False
然后您可以用
self.initialize\u eComm()
替换
self.\uuu init\uuu()
,以避免子类中的名称冲突

connect()中的self.\uuuuu init\uuuuuuuuu是指comDriver,而不是它应该指的eComm

这不太合适--
self
引用调用对象,即
comDriver
。如果您想调用
eComm
上的
\uuuuu init\uuuu
方法,而不管是什么类对其进行了扩展,则必须在中显式引用

eComm.__init__(self)
但是,其他答案和评论是正确的,这不是
\uuuu init\uuuu
的好用法

connect()中的self.\uuuuu init\uuuuuuuuu是指comDriver,而不是它应该指的eComm

这不太合适--
self
引用调用对象,即
comDriver
。如果您想调用
eComm
上的
\uuuuu init\uuuu
方法,而不管是什么类对其进行了扩展,则必须在中显式引用

eComm.__init__(self)

但是,其他答案和评论是正确的,这不是对
\uuuu init\uuuu

的良好使用,这可能是对Python特殊方法
\uu init\uuuu
的错误使用。您可能需要创建一个单独的“初始值设定项”方法,并从
\uuuuu init\uuuu
调用它“如果它断开连接,我们需要使用
\uuuuuu init\uuuu
重新初始化它”-这是个坏主意<代码>\uuuu init\uuuu实际上应该只用于设置新实例。虽然在技术上可以在已经初始化的实例上调用它,但这样做会导致各种各样的麻烦。这可能是Python的特殊方法
\uuuuu init\uuuu
的一个错误用法。您可能需要创建一个单独的“初始值设定项”方法,并从
\uuuuu init\uuuu
调用它“如果它断开连接,我们需要使用
\uuuuuu init\uuuu
重新初始化它”-这是个坏主意<代码>\uuuu init\uuuu实际上应该只用于设置新实例。虽然在技术上可以在已经初始化的实例上调用它,但这样做会导致各种各样的麻烦。