首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: open_ssh_tunnel()缺少一个必需的位置参数:'self‘

TypeError: open_ssh_tunnel()缺少一个必需的位置参数:'self‘
EN

Stack Overflow用户
提问于 2021-07-12 18:04:06
回答 1查看 102关注 0票数 0

,所以我知道这个问题已经问过很多次了,但是我似乎无法理解我需要在init def中添加什么。当我调用open_ssh_tunnel函数时。错误TypeError: open_ssh_tunnel()缺少1,需要位置参数:'self‘。任何帮助都将不胜感激。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2021-07-12 19:36:59

根据open_ssh_tunnel中的代码,您似乎使用了3个实例变量ssh_hostssh_usernamessh_password。这些实例变量应该在__init__方法中定义,因为您正在使用self调用它们。类似于:

代码语言:javascript
复制
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__方法看起来应该是:

代码语言:javascript
复制
def __init__(self, host, username, password):
  self.ssh_host = host
  self.ssh_username = username
  self.ssh_password = password

然后在您定义的open_ssh_tunnel方法中使用这三个实例变量。

self本身是一个实例变量,它引用您已初始化的对象。您将只使用它来调用类中其他方法中的对象的其他实例变量。使用上面的第二个__init__初始化这个示例如下所示:

代码语言:javascript
复制
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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68352046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档