You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:13:10