即使在Python 3.6中也不保留属性定义顺序

ost*_*ach -1 python python-3.6

根据Python 3.6发行说明," 现在保留了类属性定义顺序".这在PEP 520中更详细地描述.

但是,我似乎无法让这个工作?

例如:

class Foo:
    c = 1
    b = 2
    a = 3

print(Foo.__dict__)
# mappingproxy({'__dict__': <attribute '__dict__' of 'Foo' objects>,
#               '__doc__': None,
#               '__module__': '__main__',
#               '__weakref__': <attribute '__weakref__' of 'Foo' objects>,
#               'a': 3,
#               'b': 2,
#               'c': 1})
Run Code Online (Sandbox Code Playgroud)

要么:

class Foo:
    def __init__(self, c=1, b=2, a=3):
        self.c = c
        self.b = b
        self.a = a

foo = Foo()

foo.__dict__
# {'a': 3, 'b': 2, 'c': 1}
Run Code Online (Sandbox Code Playgroud)

我有什么误会?

use*_*ica 5

从输出的外观来看,这可能不是你真正运行的代码.你可能写过

Foo.__dict__
Run Code Online (Sandbox Code Playgroud)

在IPython交互式会话中.IPython在显示时自动对dicts和mappingproxy对象的键进行排序.