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
相关产品推荐
相关产品推荐

