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

Python 仅当通过点运算符访问时dict AttributeError,python,dictionary,Python,Dictionary,因此,我创建了这样一个dict: request = {"method": "get"} 当我试图用 print list(request.keys()) 我得到了我所期望的: ['method'] get 我可以使用访问方法属性 print request['method'] 我得到了我所期望的: ['method'] get 但是如果我试着 print request.method 我犯了一个错误 AttributeError:“dict”对象没有属性“method” 为什么

因此,我创建了这样一个dict:

request = {"method": "get"}
当我试图用

print list(request.keys())
我得到了我所期望的:

['method']
get
我可以使用访问
方法
属性

print request['method']
我得到了我所期望的:

['method']
get
但是如果我试着

print request.method
我犯了一个错误

AttributeError:“dict”对象没有属性“method”


为什么使用
时会出现错误,但使用方括号时不会出现错误?

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

  • 请求['method']
    翻译成
  • request.method
    转换为
python中字典的API通过“可下标接口”工作。也就是说,它的项目应该通过
get
方法或
[]
索引来访问

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

通过覆盖以下内容,可以很容易地模拟成员的访问:


因为您无法通过使用键的方式从字典中获取值(
dict.key
dict[“key”]
不同-它在使用时调用不同的方法,如@Elisha的答案所示)

“方法”
不是一个属性,它是一个,表示
“获取”
。在您的情况下,从给定键的字典中获取值的唯一有效方法是
request[“method”]
request.get(“method”,“defaultmethod”)


希望这有帮助

点表示法通常用于获取对象的属性。例如:

class Dog:    
    def __init__(self, name):
        self.name = name

d = Dog(name = 'Fuffy')

print d.name # 'Fuffy'
当您想通过字典的
从字典中获取条目时,您必须使用符号
dict['key']
,或者,可能不太常见,也可以使用:

dict.get(key, default=None)
其中default(默认为
None
)是键不存在时返回的值。比如说

request = {"method": "get"}
print request.get('method','foo') # get
print request.get('bar','foo') # foo

如果将
转换为
\uuuuu getattribute\uuuuu
,我不清楚为什么重写
\uuuuuuu getattr\uuuuu
会起作用?我可能把它简化了<在访问对象的任何属性(如
get
函数或
keys
函数)之前,会调用code>\uuuuuuuuuu getattribute\uuuuu<另一方面,代码>\uuu getattr\uuuu仅在缺少请求的属性时调用。在本例中,
\uu getattr\uu
意味着它不会隐藏
dict
的内置函数。谢谢