“self”参数和python请求模块的问题

2024-05-19 02:50:32 发布

您现在位置:Python中文网/ 问答频道 /正文

从类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,如果switch == True,则执行函数dynamic_loaddynamic_exitdynamic_analyze。完成后,将所有开关设置回False


Tags: 函数coreimportselffalsetrueiftime
1条回答
网友
1楼 · 发布于 2024-05-19 02:50:32

问题是,您调用实例方法的方式就好像它们是静态方法一样。换句话说,您将这些方法称为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()。。。但这至少可以解决你所犯错误的问题

相关问题 更多 >

    热门问题