Python类实例化报错:缺失必填位置参数‘object’该如何解决?
问题根源&解决方案
你遇到的问题核心是把类的定义写成了函数——你用了def来定义COOKIEBOT2000,但你实际想创建的是一个类,应该用class关键字。这就导致Python把COOKIEBOT2000当成了普通函数,而函数里的第一个参数object就变成了必填的位置参数,所以实例化时才会报错。
修正步骤&完整代码
- 把
def替换成class,修正类的定义语法 - 修复
Clicker方法里的逻辑错误(字符串不能调用click()) - 补充
driver参数的传递(否则会报NameError)
修正后的代码如下:
from selenium import webdriver # 假设你用的是selenium,需要先导入 class COOKIEBOT2000: def __init__(self, driver, upgrade=1, click=1, prints=0): self.driver = driver # 把driver保存为实例属性 self.upgrade = upgrade self.click = click self.prints = prints def Clicker(self): if self.click == 1: # 变量名改成big_cookie,避免和方法名Clicker混淆 big_cookie = self.driver.find_element_by_id("bigCookie") big_cookie.click() if self.prints == 1: # 先获取元素文本,再处理,不要覆盖元素变量 cookie_element = self.driver.find_element_by_id("cookies") cookie_text = cookie_element.text money = cookie_text.split("\n")[0].split(" ")[0] try: money = int(money) print(money) except ValueError: # 处理文本格式异常的情况,比如带逗号的数字 money = int(money.replace(",", "")) print(money) # 使用示例 driver = webdriver.Chrome() # 初始化你的浏览器驱动 driver.get("https://orteil.dashnet.org/cookieclicker/") # 打开Cookie Clicker页面 COOKIEBOT = COOKIEBOT2000(driver) COOKIEBOT.Clicker()
额外说明
- Python 3里类默认继承自
object,不需要显式写class COOKIEBOT2000(object):,当然写了也能正常运行,但现在更推荐简洁的写法。 - 你原来的
prints分支里,先调用click.click()再获取文本是逻辑错误——因为获取文本后变量变成了字符串,再调用click()会报错,所以要先获取元素文本再处理。 - 加入了异常处理,避免cookie数量带逗号(比如10,000)时转int失败的问题。
内容的提问来源于stack exchange,提问作者Mr. Blue
相关产品推荐
相关产品推荐

