在Python中实现“\uuuu dir\uuuuuuuuuuuuuuuuuu”:它是否需要返回一个列表,以及是否需要对列表进行排序?
我有一个实现_dir__方法的类。然而,我并不完全确定dir API的一些基本细节 A:真的需要_udir__;返回一个列表吗?我的实现是使用集合来避免两次列出属性,在返回之前是否需要将其转换为列表?根据我的猜测,它必须是一个列表: 如果对象有一个名为dir的方法,则将调用此方法 并且必须返回属性列表 但是,在某一点上不返回列表中断功能吗 B:结果需要排序吗?这里的文档有点模棱两可: 结果列表按字母顺序排序 这是否意味着,调用内置的dir会自动对_dir__;返回的数据进行排序,还是意味着dir需要从_dir__;返回已排序的数据 编辑:顺便说一句,我的问题包括Python2.6和2.7以及3.3和3.4。在Python3下,包括一个集合,您无需对其排序 Python2下不存在相应的文档,因此我不确定您在Python3下需要做什么。在Python3下,包括一个集合,您不需要对它进行排序 Python2下没有相应的文档,因此我不确定您希望在那里做什么。在Python2中,它必须是一个列表。否则,在相应实例上运行dir函数时会出现TypeError在Python中实现“\uuuu dir\uuuuuuuuuuuuuuuuuu”:它是否需要返回一个列表,以及是否需要对列表进行排序?,python,built-in,Python,Built In,我有一个实现_dir__方法的类。然而,我并不完全确定dir API的一些基本细节 A:真的需要_udir__;返回一个列表吗?我的实现是使用集合来避免两次列出属性,在返回之前是否需要将其转换为列表?根据我的猜测,它必须是一个列表: 如果对象有一个名为dir的方法,则将调用此方法 并且必须返回属性列表 但是,在某一点上不返回列表中断功能吗 B:结果需要排序吗?这里的文档有点模棱两可: 结果列表按字母顺序排序 这是否意味着,调用内置的dir会自动对_dir__;返回的数据进行排序,还是意味着dir
class Dirry(object):
def __dir__(self):
return set('andy pandy mandy sandy'.split())
d = Dirry()
dir(d)
收益率:
5 d = Dirry()
----> 6 dir(d)
TypeError: __dir__() must return a list, not set
['andy', 'mandy', 'pandy', 'sandy']
如果作为列表返回,则不需要对其进行排序。dir函数将为您排序:
class DirryList(object):
def __dir__(self):
return 'andy pandy mandy sandy'.split()
d = DirryList()
dir(d)
收益率:
5 d = Dirry()
----> 6 dir(d)
TypeError: __dir__() must return a list, not set
['andy', 'mandy', 'pandy', 'sandy']
即使它不是由uu dir uu按排序顺序给出的。在Python 2中,它必须是一个列表。否则,在相应实例上运行dir函数时会出现TypeError
class Dirry(object):
def __dir__(self):
return set('andy pandy mandy sandy'.split())
d = Dirry()
dir(d)
收益率:
5 d = Dirry()
----> 6 dir(d)
TypeError: __dir__() must return a list, not set
['andy', 'mandy', 'pandy', 'sandy']
如果作为列表返回,则不需要对其进行排序。dir函数将为您排序:
class DirryList(object):
def __dir__(self):
return 'andy pandy mandy sandy'.split()
d = DirryList()
dir(d)
收益率:
5 d = Dirry()
----> 6 dir(d)
TypeError: __dir__() must return a list, not set
['andy', 'mandy', 'pandy', 'sandy']
尽管它不是由uuu dir uuu按排序顺序给出的。在Python 2.7.3下,答案是: A:是的,它必须是一个列表:
>>> class F:
... def __dir__(self):
... return set(['1'])
...
>>> dir(F())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __dir__() must return a list, not set
在Python 2.7.3下,答案是: A:是的,它必须是一个列表:
>>> class F:
... def __dir__(self):
... return set(['1'])
...
>>> dir(F())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __dir__() must return a list, not set