将多个变量传递给函数

时间:2016-03-11 19:03:21

标签: python json

我正在开展一个项目,在那里我阅读了一个JSON文件,并检索了与我正在处理的图像相关的不同信息。

我坚持如何向我的json-read函数传递多个变量,并使用它们移动到我的JSON文件中并检索我需要的值(代码仅在我传递3个变量时起作用) 。

这是代码的一部分:

class board(object):
  def __init__(self, json, image):
    self.json = json
    self.image = image  


  def extract_json(one,two,three):
    with open('document.json') as data_file:
        data = json.load(data_file)
        return data[one][two][three]


  def crop_img(coords):
    im = Image.open('./tabellone.jpg')
    cropped_im = im.crop(coords)        
    return cropped_im

  score_home_coords = extract_json("boxes", "score_home", "coord")
  score_home_crop = crop_img(score_home_coords)
  score_home_crop.save("./images/score_home_cropped.jpg")
  path1 = "./images/score_home_cropped.jpg"
  command = "ssocr-2.16.3/ssocr -d -1 -b black -l red %s" % path1
  score_home = int(subprocess.Popen(command, shell=True, stdout=subprocess.PIPE).stdout.read())

MyAgonism = board('document.json', './tabellone.jpg')
print "Score Home: %s" % MyAgonism.score_home

我创建了一个MyAgonism类的实例,我将json文件名和我必须处理的图像文件名一起传递给它。

init 接收它们,但如何在2类方法中使用它们?我想做这样的事情:

def extract_json(one,two,three):
        with open(SELF.JSON) as data_file:
            data = json.load(data_file)
            return data[one][two][three]


def crop_img(coords):
        im = Image.open(SELF.IMAGE)
        cropped_im = im.crop(coords)        
        return cropped_im

JSON文件示例:

{
    "background": "black",
    "foreground": "red",
    "boxes": {
                "time_minutes": {"foreground": "red", "type" : "7segments" , "coord": [267,132,315,182]},
                "time_seconds": {"foreground": "red", "type" : "7segments" , "coord": [327,132,389,182]},
                "score_home" : {"foreground": "red", "type": "7segments", "coord": [204,51,276,101]},
...

提前感谢您的帮助。

我需要这样的东西:

   def extract_json(self, *args): 
       with open('document.json') as data_file: 
          data = json.load(data_file) 
          return data[args] 

但所有的args都以这种方式显示:

  

(args1,args2,args3,args4)

而我需要

  

[args1] [args2] [args3] [args4]

使用正确的密钥正确访问我的json文件

修正了,该方法毫无用处。我刚刚用过:

with open(self.json_path) as f:
    self.d = json.load(f)

1 个答案:

答案 0 :(得分:0)

您刚忘记将self作为第一个参数放在两个类方法中:

def extract_json(self, one, two, three):
    with open(self.json) as data_file:
        ...

  def crop_img(self, coords):
    im = Image.open(self.image)
    ...

简化说明:

  • 需要使用在传递过程中传递的一些变量的类的方法 instanciation(实例特定值)必须以self作为第一个参数。 这些被称为 实例方法。
  • 不需要访问实例的类的方法 属性,但需要访问类属性或方法, 需要cls作为第一个参数。 这些被称为类方法。
  • 不需要访问self并且只执行的类的方法 一些逻辑并返回一个值,不需要self,也不需要cls这些是 称为静态方法。

更多解释here