dict AttributeError 仅在通过点运算符访问时

wog*_*and 3 python dictionary

所以我正在创建一个这样的字典:

request = {"method": "get"}
Run Code Online (Sandbox Code Playgroud)

当我尝试列出属性时

print list(request.keys())
Run Code Online (Sandbox Code Playgroud)

我得到了我所期望的:

['method']
Run Code Online (Sandbox Code Playgroud)

我可以访问该method属性

print request['method']
Run Code Online (Sandbox Code Playgroud)

我得到了我所期望的:

get
Run Code Online (Sandbox Code Playgroud)

但如果我尝试

print request.method
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

AttributeError: 'dict' 对象没有属性 'method'

为什么我在.使用方括号时出现错误但不是?

Eli*_*sha 9

这两个操作转化为不同的方法调用:

python中的字典API通过“支持下标的接口”工作。意思是,它的项目应该通过get方法或[]索引来访问。

一个工作而另一个失败的原因是操作是不等价的。只有get和[]有效的原因是由于python中的实现。

通过覆盖可以轻松地模拟成员访问__getattr__:

class AttrDict(dict):
    def __getattr__(self, name):
        return self[name]

request = AttrDict({'method': 'get'})
method = request.method  # 'get'
Run Code Online (Sandbox Code Playgroud)