假设你有一个班级Person
class Person:
name = "Samuel"
age = 50
country = "India"
def method1(self):
print("Method 1")
print(dir(Person))
上述程序的输出如下所示:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__',
'age', 'country', 'method1', 'name']
您可以从上面的输出中看到它返回该对象的有效属性的排序列表。如果您查看类 Person:
姓名、年龄、国家
是属性,method1 是该类的方法。因此,当您使用 dir(Person) 时,它将显示该类的所有属性。
默认的 dir() 机制对不同类型的对象表现不同,因为它试图生成最相关而不是完整的信息:
- 如果对象是模块对象,则列表包含模块属性的名称。
- 如果对象是类型或类对象,则列表包含其属性的名称,并递归地包含其基类的属性。
- 否则,该列表包含对象的属性名称、其类属性的名称,以及其类的基类属性的递归名称。
例如,
a = [1,2,3,45]
print(dir(a))
这将打印:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__dir__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
'__imul__', '__init__', '__init_subclass__', '__iter__', '__le__',
'__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
'__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend',
'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
在这里,您可以看到一些其他属性名称插入、弹出、删除等。如果您检查以前的列表,它们不存在。 这是因为不同类型的对象具有不同的属性,通过这些属性,您可以以不同的形式使用这些对象。
您可以使用a.pop(2) 删除元素等。
len 我假设是指 len()
通常,len() 是您用来获取对象长度的公共接口。 __len__ 方法是支持长度概念的对象期望实现的实现。 len() 致电__len__()
我想我在返回的属性列表中看到了一些成员函数,len 我假设是指 len(),但是列出的所有这些其他内容是什么?
访问以下链接,https://docs.python.org/3.6/reference/datamodel.html#object.dir。其中大部分都列在这里。还描述了其中的用法。