python - 如何将基类 __init__ 称为 self?
问题描述
如何使用 重新初始化基类self.__init__
?
在下面的示例中,我的目标是继承 eComm,它是一个套接字派生的驱动程序。这处理连接/断开连接。如果它断开连接,我们需要使用 重新初始化它__init__
,但是它似乎在调用时引用了 comDriver self.__init__
。
如何正确初始化超类以允许这样做?
(否则:self.__init__
在 connect() 中指的是 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)
解决方案
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()
以避免子类中的名称冲突。
推荐阅读
- java - 在 Web3j 以太坊交易中设置十六进制编码的数据字段
- java - 代码 14:无法打开数据库
- java - 具有自定义数据源偏移量的 Android 分页库 RecyclerView 中的项目
- python-3.x - 程序不解析标签
- javascript - 将 Speech to Text 模块添加到 C# bot
- javascript - 使用 jquery 动态设置活动选项卡
- c - linux execve,分段错误(strcmp_sse42)
- python - 使用数组查找 TensorFlow 哈希表
- python - Python(TKinter)GUI不会显示文本
- firebase - 是否可以通过 Firebase Cloud Messaging (FCM) 向离线用户发送消息?