Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中实现“\uuuu dir\uuuuuuuuuuuuuuuuuu”:它是否需要返回一个列表,以及是否需要对列表进行排序?_Python_Built In - Fatal编程技术网

在Python中实现“\uuuu dir\uuuuuuuuuuuuuuuuuu”:它是否需要返回一个列表,以及是否需要对列表进行排序?

在Python中实现“\uuuu dir\uuuuuuuuuuuuuuuuuu”:它是否需要返回一个列表,以及是否需要对列表进行排序?,python,built-in,Python,Built In,我有一个实现_dir__方法的类。然而,我并不完全确定dir API的一些基本细节 A:真的需要_udir__;返回一个列表吗?我的实现是使用集合来避免两次列出属性,在返回之前是否需要将其转换为列表?根据我的猜测,它必须是一个列表: 如果对象有一个名为dir的方法,则将调用此方法 并且必须返回属性列表 但是,在某一点上不返回列表中断功能吗 B:结果需要排序吗?这里的文档有点模棱两可: 结果列表按字母顺序排序 这是否意味着,调用内置的dir会自动对_dir__;返回的数据进行排序,还是意味着dir

我有一个实现_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

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