对于两个不同的类,我想比较一下方法,看看它们是否相同。
我希望代码能够识别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
但没有运气……想买吗?
一个不太优雅但有效的解决方案是:
- 使用readlines()解析模块
- 查找包含'def '的方法名
- 找到方法开始的行号
- 将方法名之间的所有行放在一个列表中
- 与functools比较相关的列表和每个方法。reduce(lambda x, y: x和y, map(lambda p, q: p == q, f1, f2), True)