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

Python中Attributes与Named Methods的区别是什么?

问题核心解答

你此前对属性和方法的区分是很多面向对象编程语言的通用分类,但在Python的术语体系中,方法本身就属于属性的一个子类,二者是包含关系而非并列关系。

1. Python中属性的定义

在Python语境下,所有可以通过「对象.成员名」形式访问的内容,统一叫做属性(attribute),不管这个成员存储的是普通数值、字符串、还是函数/方法对象。
比如你定义一个简单的类:

class Demo:
    # 普通值类属性
    type_name = "demo"
    # 方法,本质也是类的属性
    def test(self):
        pass

你运行dir(Demo)会看到type_name和test都在返回结果里,二者都是类的属性。

2. 书中「Named Methods」的定义

这里提到的11个named methods是属性的子集,特指不带前后双下划线、给用户直接调用的公开可调用属性,也就是我们平时操作列表常用的方法,比如append、pop、insert、sort等。

3. 剩余非方法属性的构成

剩下的34个属性大部分是Python为了实现列表的语法特性、内省能力预设的特殊成员,也就是我们常说的魔法属性/魔法方法,比如:

  • __len__:实现len([])调用的逻辑
  • __getitem__:实现[1,2,3][0]索引访问的逻辑
  • __class__:指向列表对象所属的list类
  • __doc__:存储list类型的官方文档说明

你可以自己运行以下代码验证书里的统计结果:

# 获取空列表的所有属性
all_attrs = dir([])
# 筛选公开的普通方法
public_methods = [
    attr for attr in all_attrs 
    if not attr.startswith('__') and callable(getattr([], attr))
]
print(f"总属性数:{len(all_attrs)}")
print(f"公开普通方法数:{len(public_methods)}")

运行结果和书中描述一致:总属性数45,公开普通方法数11。


内容的提问来源于stack exchange,提问作者Anurag Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:06:02