Python中如何利用dir()方法分离对象的属性与方法
区分Python对象的属性与方法
要把dir()返回的列表拆分为属性和方法其实很简单,核心思路是方法是可调用的(能加括号执行),而普通属性不行。我们可以用Python内置的callable()函数来做判断,结合getattr()获取对象的对应成员,就能轻松分离两者。
基础实现方案
就拿你提到的int对象举例,直接看代码:
i = 10 all_members = dir(i) attributes = [] methods = [] for member in all_members: # 获取当前成员对应的实际对象 obj = getattr(i, member) # 判断是否可调用:可调用的是方法,否则是属性 if callable(obj): methods.append(member) else: attributes.append(member) print("属性列表:") print(attributes) print("\n方法列表:") print(methods)
运行后你会看到,real、imag这类属于属性,而__add__、__sub__、bit_length这些会被归类到方法里。
进阶:排除魔术方法/属性
如果不想看到那些前后带双下划线的「魔术成员」(比如__init__、__doc__),可以在判断时加个过滤条件,得到更简洁的结果:
i = 10 all_members = dir(i) attributes = [] methods = [] for member in all_members: # 跳过魔术成员 if member.startswith('__') and member.endswith('__'): continue obj = getattr(i, member) if callable(obj): methods.append(member) else: attributes.append(member) print("常规属性:", attributes) print("常规方法:", methods)
小提醒
callable()的判断对于Python内置对象(比如int、str)非常可靠,几乎不会出错。- 要是处理自定义类的对象,遇到属性值本身是可调用对象的情况,可以根据你的实际需求调整判断逻辑,但核心思路还是一致的。
内容的提问来源于stack exchange,提问作者Ali Murtaza
相关产品推荐
相关产品推荐

