Python内置类是否包含属性?如何查找类可用属性?
Python内置类(list/str)的属性相关问题解答
一、list、str等内置类有没有可通过点符号访问的非方法属性?
有的,不过大多是Python内部使用的特殊属性,而非面向业务的公开属性。比如:
__class__:所有实例都具备,指向该实例所属的类,比如执行'test'.__class__会返回<class 'str'>;__doc__:类或实例的文档字符串,比如[].__doc__会返回列表类的官方说明文本;__module__:返回该类所在的模块名,内置类的结果都是'builtins'。
这些属性直接通过点符号访问即可,不需要加括号调用。
二、dir()返回的带下划线元素是什么?
这些是Python的双下划线成员(也常被称为魔术方法/特殊成员),是Python语言底层实现的核心接口:
- 带双下划线的方法:比如
__add__对应+运算符(实现字符串拼接、列表合并),__len__对应内置函数len(); - 带双下划线的属性:比如前面提到的
__class__、__doc__。
这类成员是Python与对象交互的底层通道,多数时候不需要直接调用,而是通过运算符、内置函数等语法糖触发。
三、怎么区分属性和方法?
有两个简单实用的判断方式:
- 查看类型:用
type()检查成员的类型,如果是builtin_function_or_method或类似的方法/函数类型,就是方法;如果是str、type、int这类普通数据类型,就是属性。示例:test = 'test' print(type(test.capitalize)) # <class 'builtin_function_or_method'> 属于方法 print(type(test.__class__)) # <class 'type'> 属于属性 - 看调用方式:方法需要加括号执行(比如
test.capitalize()),属性直接访问不需要括号(比如test.__class__)。
四、list实例的可用属性怎么查看?
和str实例的查看方式一致,常用的有两种:
- 使用dir()函数:直接传入list实例,返回所有可访问的成员名称列表,包含属性和方法。示例:
my_list = [1, 2, 3] print(dir(my_list)) - 借助inspect模块:通过
inspect.getmembers()可以同时获取成员名称和对应对象,能直接区分属性和方法。示例:import inspect my_list = [1, 2, 3] for name, obj in inspect.getmembers(my_list): print(f"{name}: {type(obj).__name__}")
内容的提问来源于stack exchange,提问作者NaiveBae
相关产品推荐
相关产品推荐

