,所以我知道这个问题已经问过很多次了,但是我似乎无法理解我需要在init def中添加什么。当我调用open_ssh_tunnel函数时。错误TypeError: open_ssh_tunnel()缺少1,需要位置参数:'self‘。任何帮助都将不胜感激。
def __init__(self):
???
def open_ssh_tunnel(self, verbose=False):
"""Open an SSH tunnel and connect using a username and password.
:param verbose: Set to True to show logging
:return tunnel: Global SSH tunnel connection
"""
if verbose:
sshtunnel.DEFAULT_LOGLEVEL = logging.DEBUG
global tunnel
tunnel = SSHTunnelForwarder(
(self.ssh_host, 22),
ssh_username= self.ssh_username,
ssh_password= self.ssh_password,
remote_bind_address=('127.0.0.1', 3306)
)
tunnel.start()发布于 2021-07-12 19:36:59
根据open_ssh_tunnel中的代码,您似乎使用了3个实例变量ssh_host、ssh_username和ssh_password。这些实例变量应该在__init__方法中定义,因为您正在使用self调用它们。类似于:
class SSHExample:
def __init__(self):
self.ssh_host = "<insert ssh host value>"
self.ssh_username = "<insert username value>"
self.ssh_password = "<insert password value>"更有可能的是,初始化对象时必须传递这3个值,因为主机、用户名和密码并不总是相同的值。因此,__init__方法看起来应该是:
def __init__(self, host, username, password):
self.ssh_host = host
self.ssh_username = username
self.ssh_password = password然后在您定义的open_ssh_tunnel方法中使用这三个实例变量。
self本身是一个实例变量,它引用您已初始化的对象。您将只使用它来调用类中其他方法中的对象的其他实例变量。使用上面的第二个__init__初始化这个示例如下所示:
ssh_obj = SSHExample('fake_host', 'fake_user', 'fake_pass')
print(ssh_obj.ssh_host) # prints "fake_host"
print(ssh_obj.ssh_username) # prints "fake_user"https://stackoverflow.com/questions/68352046
复制相似问题