когда я могу использовать точечную запись для доступа к словарю в Python - PullRequest
0 голосов
/ 20 февраля 2020

Я модифицирую чей-то код в контексте среды 'gym' 'и наткнулся на использование точечной нотации для доступа к словарю. следующий фрагмент показывает, что словарь в тренажерном зале может использовать нотацию, но когда я дублирую его, он выдает ошибку.

import gym
env = gym.Env
env = make('connectx', debug=True)
config = env.configuration
print(config)
print(config.timeout)
dct = {'timeout': 5, 'columns': 7, 'rows': 6, 'inarow': 4, 'steps': 1000}
print(dct.timeout)

это обеспечивает следующий вывод:

{'timeout': 5, 'columns': 7, 'rows': 6, 'inarow': 4, 'steps': 1000}
5

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
   <ipython-input-45-674d59d34c55> in <module>
      6 print(config.timeout)
      7 dct = {'timeout': 5, 'columns': 7, 'rows': 6, 'inarow': 4, 'steps': 1000}
----> 8 print(dct.timeout)

AttributeError: 'dict' object has no attribute 'timeout'

Я использую Python 3. Может кто-нибудь объяснить, пожалуйста? Спасибо

1 Ответ

0 голосов
/ 20 февраля 2020

В python вы не можете получить доступ к словарному значению с помощью dict.key, вам необходимо использовать dict[key]

Пример:

d = {"foo": 2}
print(d["foo"])
# 2

key = foo
print(d[key])
# 2

print(d.foo)
# AttributeError: 'dict' object has no attribute 'foo'

print(d.key)
# AttributeError: 'dict' object has no attribute 'key'

Если вы действительно хотите использовать точечная запись , вы можете использовать класс (кстати, ваш config, вероятно, является экземпляром класса):

class MyClass():
    def __init__(self):
        self.foo = "bar"

a = MyClass()
print(a.foo)
# bar
...