Python 仅当通过点运算符访问时dict AttributeError
因此,我创建了这样一个dict: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” 为什么
request = {"method": "get"}
当我试图用
print list(request.keys())
我得到了我所期望的:
['method']
get
我可以使用访问方法
属性
print request['method']
我得到了我所期望的:
['method']
get
但是如果我试着
print request.method
我犯了一个错误
AttributeError:“dict”对象没有属性“method”
为什么使用
时会出现错误,但使用方括号时不会出现错误?这两个操作转换为不同的方法调用:
翻译成请求['method']
转换为request.method
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
的内置函数。谢谢