【问题标题】:Issues with 'self' argument and python requests module'self' 参数和 python 请求模块的问题
【发布时间】:2021-10-31 08:18:35
【问题描述】:

从类 dynamic 调用函数 dynamic_exit 时出现问题,该函数是从项目文件中导入的 python 文件调用的。只包含足够的代码来描述我的问题的有效示例。

下面的调用示例:

from lib.core import dynamic
import ...

if requests.get(url).status_code != 200:
    clear()
    print(" xxxxx \n\n\n")
    print("[ !! | Invalid URL ] Status code: {0}".format(
                                                str(requests.get(url).status_code)))
    time.sleep(1)
    print("\n\n Please enter a valid URL.\nExiting...")
    dynamic.dynamic_exit(self=dynamic())
    time.sleep(3)
    exit()

Lib.core 包含:

class dynamic:

    def __init__(self):
        self.loadSwitch = False
        self.analyzeSwitch = False
        self.exitSwitch = False

    def dynamic_load(self, loadSwitch=True):
        self.loadSwitch = loadSwitch
        done = False
        for c in itertools.cycle(['[ | ]', '[ / ]', '[ - ]', '[ \\ ]']):
            if done:
                break

        sys.stdout.write('\rLoading ' + c)
        sys.stdout.flush()
        time.sleep(0.1)

# Further along...
if dynamic.dynamic_analyze(): # Separate function -- Irrelevant
    t = threading.Thread(target=dynamic_analyze())
    t.start()
elif dynamic_exit(): # Separate function -- Irrelevant
    t2 = threading.Thread(target=dynamic_exit())
    t2.start()
else: # dynamic_load -- Example function
    t3 = threading.Thread(target=dynamic_load())
    t3.start()

sys.stdout.write('\r[ ✓ ] Process Complete ')
time.sleep(4.5)

done = True
loadSwitch = False
exitSwitch = False
analyzeSwitch = False

主啊,我知道这是一团糟。第一次真正使用这样的类。

错误如下:

  File "~/test-delete.py", line 11, in <module>
    from lib.core import dynamic
  File "~/lib/core.py", line 55, in <module>
    if dynamic.dynamic_analyze():
TypeError: dynamic_analyze() missing 1 required positional argument: 'self'

IDE 需要的不仅仅是一个简单的self 参数,而是推荐self=。所以不知道如何处理。

基本上,在__init__ 函数的上下文和使用self 参数的情况下需要帮助。尝试调用函数设置exitSwitchanalyzeSwitchloadSwitch = True、ifswitch == True,执行函数dynamic_loaddynamic_exitdynamic_analyze。完成后,将所有开关设置回False

【问题讨论】:

  • 您是否遇到特定错误?您发布的代码似乎存在缩进问题
  • 必须提供正确缩进的代码,它是python语法的一部分
  • 不管怎样,你为什么要这么做dynamic.dynamic_exit(self=dynamic())?为什么不实例化类并正常调用方法呢?
  • 很抱歉这些家伙,现在正在做一些编辑。秒... 错误如下:Traceback (most recent call last): File "~/test-delete.py", line 11, in &lt;module&gt; from lib.core import dynamic File "~/lib/core.py", line 55, in &lt;module&gt; if dynamic.dynamic_analyze(): TypeError: dynamic_analyze() missing 1 required positional argument: 'self'

标签: python python-3.x class python-requests self


【解决方案1】:

问题是您调用实例方法,就好像它们是静态方法一样。换句话说,您将方法称为dynamic.dynamic_analyse(),其中dynamic 是对 的引用,而不是对该类的实例 的引用。

所以按照以下步骤进行:

  • 使用 PascalCase 命名您的类——这是一种将类与其他事物区分开来的常见做法。所以你的应该命名为Dynamic

  • 创建一个实例并将其分配给一个变量。这实际上可以得到名称dynamic 的小写首字母。

  • 在实例上调用方法时不要将实例作为参数传递。因为在 a.b() 表示法中,b 将被调用,并将 self 的值设置为 a

所以定义类为:

class Dynamic:
    def __init__(self):
        self.loadSwitch = False
        self.analyzeSwitch = False
        self.exitSwitch = False

    # ...etc.

导入类并像这样创建一个实例:

from lib.core import Dynamic

# ...

dynamic = Dynamic()  # Create instance

# ...

if dynamic.dynamic_analyze():  # Call method on the instance
    # ..etc

您的退出代码应该有:

dynamic.dynamic_exit()  #  No argument.

我无法评论您的其余代码,因为很难说出它在做什么。例如,我确实想知道为什么您两次调用dynamic_analyse()...但这至少可以解决您遇到的错误问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 2012-03-12
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多