瓜子仁 发表于 2020-7-4 15:50:40

向类里面的方法传递参数不成功

想通过pyautogui做一个自动化的游戏脚本。先定义了一个类,然后想在类的实例方法里传递需要识别的图片文件名。结果发现向实例对象里传递参数失败,程序始终识别的是在init方法里定义的self.img01 = 'zudui.PNG'。程序位报错。苦于找不到原因,希望大家解答一下,感谢!附上代码


import pyautogui
import time

class SHIBIE():
    def __init__(self): #构造函数带参数,实例化时就需要带参数
      self.start = 1
      self.img01 = 'zudui.PNG'
      self.img02 = '...'

    def zdsb(self,img01): #构造函数未带参数,实例方法带参数,实例化无需带参数,调用方法时带参数即可
      print(self.img01)
      while self.start:
            self.dianji = pyautogui.locateOnScreen(self.img01,confidence = 0.9)   #未发现返回none.有confidence属性是名称不能为中文
            if self.dianji == None:
                print('未发现,3s后再次识别')
                time.sleep(3)
            else:
                self.button_dj = pyautogui.center(self.dianji)
                self.button_dj_x, self.button_dj_y = self.button_dj
                print(self.button_dj_x, self.button_dj_y)
                pyautogui.click(self.button_dj_x, self.button_dj_y)
                self.start = 0


zd = SHIBIE()
jy = SHIBIE()
cjdw = SHIBIE()
cj = SHIBIE()
ks = SHIBIE()
cx = SHIBIE()

zd.zdsb('01zudui.PNG')
jy.zdsb('02jinyan.PNG')
cjdw.zdsb('03cjdw.PNG')
cj.zdsb('04cj.PNG')
ks.zdsb('05kszd.PNG')
cx.zdsb('06cxtg.PNG')


附上结果:
zudui.PNG
363 322
zudui.PNG
363 322
zudui.PNG
363 322
zudui.PNG
363 322
zudui.PNG
363 322

Process finished with exit code 0

Twilight6 发表于 2020-7-4 15:55:04



zdsb 方法的参数是 img01 ,这算局部变量 而和 self.img01 毫无关联

而你调用 zdsb 方法函数时候,打印的始终是打印 初始化的 self.img01 而不是 img01


瓜子仁 发表于 2020-7-4 16:56:50

Twilight6 发表于 2020-7-4 15:55
zdsb 方法的参数是 img01 ,这算局部变量 而和 self.img01 毫无关联

而你调用 zdsb 方法函数时候, ...

可是当我删除点self.img01的时候,系统报我没有给img定义。我应该怎么改才能实现目标呢?

Twilight6 发表于 2020-7-4 16:58:56

瓜子仁 发表于 2020-7-4 16:56
可是当我删除点self.img01的时候,系统报我没有给img定义。我应该怎么改才能实现目标呢?




你将 zdsb 方法里面 print前面前面增加一项 self.img01 = img01 试试看

永恒的蓝色梦想 发表于 2020-7-4 17:08:33

瓜子仁 发表于 2020-7-4 16:56
可是当我删除点self.img01的时候,系统报我没有给img定义。我应该怎么改才能实现目标呢?

删除 self.img01 会报没定义 img?

瓜子仁 发表于 2020-7-5 00:08:27

永恒的蓝色梦想 发表于 2020-7-4 17:08
删除 self.img01 会报没定义 img?

当我删除后显示
AttributeError: 'SHIBIE' object has no attribute 'img01'

瓜子仁 发表于 2020-7-5 00:13:43

Twilight6 发表于 2020-7-4 16:58
你将 zdsb 方法里面 print前面前面增加一项 self.img01 = img01 试试看

可以了,非常感谢,那如果我不一开始没有设置self.img01,为什么在传递参数的时候会报错
AttributeError: 'SHIBIE' object has no attribute 'img01'
页: [1]
查看完整版本: 向类里面的方法传递参数不成功