比较两个类的方法中的代码



对于两个不同的类,我想比较一下方法,看看它们是否相同。

我希望代码能够识别func1是相同的,而func2是不同的。

class A:
def func1(self):
return 1
def func2(self):
return 2
class B:
def func1(self):
return 1
def func2(self):
return 1000

我的方法是:

# get a list of the functions in each
a_funcs, b_funcs = dir(A), dir(B)
all_funcs = set(a_funcs).union(b_funcs)
all_funcs_no_builtins = [f for f in all_funcs if not f.startswith('__')]
# compare the methods
equal_funcs = defaultdict(list)
for f in list(all_funcs_no_builtins):
if ((f in a_funcs) and (f in b_funcs)):
a_code = getattr(A, f) 
b_code = getattr(B, f) 
if a_code == b_code:
equal_funcs['same'].append(f)
else:
equal_funcs['different'].append(f)
else:
equal_funcs['different'].append(f)
# summarize
print("Total number of methods:", len(all_funcs_no_builtins))   # 2
print("Number that are the same:", len(equal_funcs['same']))    # 0
print("Same:", equal_funcs['same'])                             # []
print("Different:", equal_funcs['different'])         # ['func1', 'func2']

我也试着用.__code__.co_code但没有运气……想买吗?

一个不太优雅但有效的解决方案是:

  1. 使用readlines()解析模块
  2. 查找包含'def '的方法名
  3. 找到方法开始的行号
  4. 将方法名之间的所有行放在一个列表中
  5. 与functools比较相关的列表和每个方法。reduce(lambda x, y: x和y, map(lambda p, q: p == q, f1, f2), True)

最新更新