将函数参数作为参数传递给python中的另一个函数
我有两个python函数将函数参数作为参数传递给python中的另一个函数,python,Python,我有两个python函数 class JENKINS_JOB_INFO(): def __init__(self): parser = argparse.ArgumentParser(description='xxxx. e.g., script.py -j jenkins_url -u user -a api') parser.add_argument('-j', '--address', dest='address', default="", requ
class JENKINS_JOB_INFO():
def __init__(self):
parser = argparse.ArgumentParser(description='xxxx. e.g., script.py -j jenkins_url -u user -a api')
parser.add_argument('-j', '--address', dest='address', default="", required=True, action="store")
parser.add_argument('-u', '--user', dest='user', default="xxxx", required=True, action="store")
parser.add_argument('-t', '--api_token', dest='api_token', required=True, action="store")
parsers = parser.parse_args()
self.base_url = parsers.address.strip()
self.user = parsers.user.strip()
self.api_token = parsers.api_token.strip()
def main(self):
logger.info("call the function")
self.get_jobs_state()
def get_jobs_state(self):
get_jenkins_json_data(params)
def get_jenkins_json_data(self, params, base_url):
url = urljoin(self.base_url, str(params.params))
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
我有一个参数params
在我的函数get_jobs_state
中定义,我想把这个参数传递给我的另一个函数get_jenkins_json_data
,以便完整的url
内部函数get_jenkins_json_data
连接到https:/api/json?pretty=true&tree=jobs[name,color]
但是当我运行代码时,url
不正确,函数中params
的值是
这里base\u url
是我传递给脚本的一个参数
如何消除此错误?只需编写
params.params
而不是params
您这样做的方式非常混乱,因为在get_jenkins_josn_data
中,self
将是params
,而params
将是基本url
。我劝你以后不要那样做。如果要向函数发送一些参数,请发送函数所需的最少信息量。例如,在这里,您可以发送self.params
,而不是整个self
。这样您就不会遇到此错误,代码的可读性也会大大提高
我建议您以这种方式重写此函数。只需编写
params.params
而不是params
您这样做的方式非常混乱,因为在get_jenkins_josn_data
中,self
将是params
,而params
将是基本url
。我劝你以后不要那样做。如果要向函数发送一些参数,请发送函数所需的最少信息量。例如,在这里,您可以发送self.params
,而不是整个self
。这样您就不会遇到此错误,代码的可读性也会大大提高
我建议您以这种方式重写此函数。在您的函数
get\u jobs\u state
中,您将self作为params参数的参数传递给get\u jenkins\u json\u data
,在本例中self是一个类的实例
试着这样做:
class Jenkins:
def __init__(self, domain):
self.user = "user"
self.api_token = "api_token"
self.base_domain = domain
def get_jobs_state(self):
query = "api/json?pretty=true&tree=jobs[name,color]"
return self.get_jenkins_json_data(query)
def get_jenkins_json_data(self, query):
url = urljoin(self.base_domain, str(query))
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
return r
def get_jobs_state(self):
params = "api/json?pretty=true&tree=jobs[name,color]"
self.get_jenkins_json_data(params)
def get_jenkins_json_data(self, params):
url = urljoin(self.base_url, params)
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
...
在函数
get\u jobs\u state
中,将self作为params参数的参数传递给get\u jenkins\u json\u data
,在本例中,self是一个类的实例
试着这样做:
class Jenkins:
def __init__(self, domain):
self.user = "user"
self.api_token = "api_token"
self.base_domain = domain
def get_jobs_state(self):
query = "api/json?pretty=true&tree=jobs[name,color]"
return self.get_jenkins_json_data(query)
def get_jenkins_json_data(self, query):
url = urljoin(self.base_domain, str(query))
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
return r
def get_jobs_state(self):
params = "api/json?pretty=true&tree=jobs[name,color]"
self.get_jenkins_json_data(params)
def get_jenkins_json_data(self, params):
url = urljoin(self.base_url, params)
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
...
所以你的解决方案有点混乱。您不应该将self传递给
get\u jenkins\u json\u data
方法。python将自动为您执行此操作。您应该检查数据模型的工作原理。我会像这样重构您的代码:
class Jenkins:
def __init__(self, domain):
self.user = "user"
self.api_token = "api_token"
self.base_domain = domain
def get_jobs_state(self):
query = "api/json?pretty=true&tree=jobs[name,color]"
return self.get_jenkins_json_data(query)
def get_jenkins_json_data(self, query):
url = urljoin(self.base_domain, str(query))
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
return r
def get_jobs_state(self):
params = "api/json?pretty=true&tree=jobs[name,color]"
self.get_jenkins_json_data(params)
def get_jenkins_json_data(self, params):
url = urljoin(self.base_url, params)
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
...
所以你的解决方案有点混乱。您不应该将self传递给
get\u jenkins\u json\u data
方法。python将自动为您执行此操作。您应该检查数据模型的工作原理。我会像这样重构您的代码:
class Jenkins:
def __init__(self, domain):
self.user = "user"
self.api_token = "api_token"
self.base_domain = domain
def get_jobs_state(self):
query = "api/json?pretty=true&tree=jobs[name,color]"
return self.get_jenkins_json_data(query)
def get_jenkins_json_data(self, query):
url = urljoin(self.base_domain, str(query))
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
return r
def get_jobs_state(self):
params = "api/json?pretty=true&tree=jobs[name,color]"
self.get_jenkins_json_data(params)
def get_jenkins_json_data(self, params):
url = urljoin(self.base_url, params)
r = requests.get(url, auth=HTTPBasicAuth(self.user, self.api_token), verify=False)
...
在
urljoin
的参数中,使用self.params
,而不是从get\u jobs\u state
中给出的params
时,使用get\u jenkins\u json\u data
是故意的吗,我必须在def\uuu init\uuuu(self):
中声明self.params=[]
。如果我不这样做,我的脚本就会失败,出现错误AttributeError:CLASSNAME实例没有属性“params”
您可以这样调用方法self。是否有意获取\u jenkins\u json\u数据(self,params)
?因为这样,self
将是params
,params
将是base\u url
。如果必须在其他地方使用该变量,则@AttilaBognár的方式更好,最好先初始化,然后在类中使用它instance@AttilaBognár我不熟悉这个self
关键字,所以我不知道调用self.get\u jenkins\u json\u data(self,params)
是否不正确是故意给get\u jenkins\u json\u data
提供params
,但在urljoin
的参数中使用了self.params
,在get_jobs\u state
给出的params
上,无论我是在urljoin
中使用self.params
还是仅仅在urljoin
中使用self.params=[]
都没有区别,我必须在def\uu init\uuu(self):
中声明。如果我不这样做,我的脚本就会失败,出现错误AttributeError:CLASSNAME实例没有属性“params”
您可以这样调用方法self。是否有意获取\u jenkins\u json\u数据(self,params)
?因为这样,self
将是params
,params
将是base\u url
。如果必须在其他地方使用该变量,则@AttilaBognár的方式更好,最好先初始化,然后在类中使用它instance@AttilaBognár我不熟悉这个self
关键字,因此,我不知道调用self.get_jenkins_json_data(self,params)
是否正确,但我的基本域会根据需求不断变化,对于每个更新过的代码来说都不一样。将其移动到构造函数,这样您就可以为任何域创建Jenkins的实例。此代码也可以使用。非常感谢您的帮助:)但是我的基本域会根据需求不断变化,不同于每一个更新的代码。将其移动到构造函数,这样您就可以为任何域创建Jenkins的实例。此代码也可以使用。非常感谢你的帮助:)是的,这个很有魅力。非常感谢你的帮助:)是的,这个很有魅力。非常感谢您的帮助……)