python – 避免使用多态不起作用的type()比较
发布时间:2020-12-20 11:18:33 所属栏目:Python 来源:网络整理
导读:我在 How to Think Like a Computer Scientist( here)遇到了以下内容: def recursive_sum(nested_num_list): sum = 0 for element in nested_num_list: if type(element) == type([]): sum = sum + recursive_sum(element) else: sum = sum + element retur
我在
How to Think Like a Computer Scientist(
here)遇到了以下内容:
def recursive_sum(nested_num_list): sum = 0 for element in nested_num_list: if type(element) == type([]): sum = sum + recursive_sum(element) else: sum = sum + element return sum 我对使用type(element)== type([])感到震惊.这不仅是不好的做法,而且这个功能不适用于任何其他序列类型.多态性是避免类型比较的典型方法,但不能在此处使用.在这种情况下如何避免类型比较?我考虑过: def recursive_sum(nested_sum_list): sum = 0 for element in nested_num_list: try: sum += element except TypeError: sum += recursive_sum(element) return sum 这使得该功能适用??于其他序列,但仍然有点粗略.谢谢! 解决方法
“sum”函数采用迭代,所以我会检查元素是否实现__iter__方法,使用“hasattr”内置函数.
像这样: def recursive_sum(nested_num_list): sum = 0 for element in nested_num_list: if hasattr(element,'__iter__'): sum = sum + recursive_sum(element) else: sum = sum + element return sum (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |