类内的Python函数递归
我下了一节课类内的Python函数递归,python,function,class,recursion,methods,Python,Function,Class,Recursion,Methods,我下了一节课 class Message: def __init__(self, message): self.message = message self.__dict__.update(message) def dict_value_finder(self, field, partial_match=False): """It Takes a dict with nested lists and dicts,
class Message:
def __init__(self, message):
self.message = message
self.__dict__.update(message)
def dict_value_finder(self, field, partial_match=False):
"""It Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided and return the value(s) as a list.
set partial_match = True to get partial matches.
"""
fields_found = []
for key, value in self.message.items():
if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)
elif isinstance(value, dict):
results = dict_value_finder(value, field, partial_match)
fields_found.extend(results)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = dict_value_finder(item, field,
partial_match)
fields_found.extend(more_results)
return fields_found
函数dict_value_finder将在类外工作,如下所示:
def dict_value_finder(search_dict, field, partial_match=False):
"""Takes a dict with nested lists and dicts,
and searches all dicts for a key of the field
provided and return the value(s) as a list.
set partial_match = True to get partial matches.
"""
fields_found = []
for key, value in search_dict.items():
if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)
elif isinstance(value, dict):
results = dict_value_finder(value, field, partial_match)
fields_found.extend(results)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = dict_value_finder(item, field,
partial_match)
fields_found.extend(more_results)
return fields_found
但是当我把它放在类中时,我得到了一个错误:
File "<ipython-input-42-76ab838299bc>", line 23, in dict_value_finder
results = dict_value_finder(value, field, partial_match)
NameError: name 'dict_value_finder' is not defined
文件“”,第23行,在dict\u value\u finder中
结果=dict值查找器(值、字段、部分匹配)
名称错误:未定义名称“dict\u value\u finder”
鉴于类需要递归,我不确定如何将此函数添加到类中。将
results=dict\u value\u finder(value,field,partial\u match)
更改为:
results = self.dict_value_finder(value, field, partial_match)
和more\u results=dict\u value\u finder(项目、字段、部分匹配)
到:
more_results = self.dict_value_finder(item, field,partial_match)
为了访问类实例的属性,我们应该使用self
要解决评论中的问题:
def dict_value_finder(self, field, partial_match=False, search=None):
fields_found = []
search = search or self.message
for key, value in search.items():
if field in key if partial_match else field == key:
fields_found.append(value)
print(key, value)
elif isinstance(value, dict):
results = self.dict_value_finder(field, partial_match, value)
fields_found.extend(results)
elif isinstance(value, list):
for item in value:
if isinstance(item, dict):
more_results = self.dict_value_finder(field,partial_match, item)
fields_found.extend(more_results)
return fields_found
您在引用
消息时使用了self
,但在引用dict\u value\u finder
时没有使用。为什么?TypeError:dict_value_finder()接受2到3个位置参数,但提供了4个。不应将self作为第一个参数,而应将value或item作为第一个参数。这来自方法的定义def dict_value_finder(self,field,partial_match=False):
您没有在此处定义项目
或值。项目和值应替换self.message。我该怎么做?