Python 当在同一范围/功能中预先提及self时,self仅在评估范围内
在以下代码中,Python 当在同一范围/功能中预先提及self时,self仅在评估范围内,python,python-3.x,scope,eval,format-string,Python,Python 3.x,Scope,Eval,Format String,在以下代码中,eval调用成功: 来自zeep导入客户端的 从zeep导入xsd 从zeep.plugins导入HistoryPlugin TrainAPI类: 定义初始化(自我,LDB_令牌): 如果LDB_令牌=='': 引发异常(“请配置您的OpenLDBWS令牌”) WSDL=http://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2017-10-01' history=HistoryPlugin() self.cl
eval
调用成功:
来自zeep导入客户端的
从zeep导入xsd
从zeep.plugins导入HistoryPlugin
TrainAPI类:
定义初始化(自我,LDB_令牌):
如果LDB_令牌=='':
引发异常(“请配置您的OpenLDBWS令牌”)
WSDL=http://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2017-10-01'
history=HistoryPlugin()
self.client=client(wsdl=wsdl,插件=[历史])
header=xsd.Element(
'{http://thalesgroup.com/RTTI/2013-11-28/Token/types}AccessToken',
xsd.ComplexType([
元素(
'{http://thalesgroup.com/RTTI/2013-11-28/Token/types}标记值',
xsd.String()),
])
)
self.header\u value=header(TokenValue=LDB\u TOKEN)
self.token=LDB_令牌
回来
def_u_ugetattr_u_u(自我,动作):
def方法(*args,**kwargs):
打印(操作、args、kwargs)
打印(自我)
返回eval(f“self.client.service.{action}(*args,**kwargs,_soapheaders=[self.header_value]))
返回方法
但是,如果删除了print(self)
行,则会引发以下错误:
File "C:/Users/-/Documents/-/main.py", line 32, in method
return eval(f"self.client.service.{action}(*args,**kwargs, _soapheaders=[self.header_value])")
File "<string>", line 1, in <module>
NameError: name 'self' is not defined
也许我不明白作用域或格式字符串是如何工作的。原因有点深入到python的工作原理,我可以告诉您是否确实需要,但要解决实际问题,答案是尽可能避免使用eval,因为通常有更好的方法。在这种情况下:
method = getattr(self.client.service, action)
return method(*args,**kwargs, _soapheaders=[self.header_value])
使用
eval
调试任何问题的第一步是询问如何在没有eval
的情况下完成所需任务。