Я знаю, что такое переменные dunder в Python, и знаю о искажениях имен.
Но по какой-то причине я не могу получить доступ к переменной dunder в следующем фрагменте кода:
for node in ast.find_all((Call,)):
# Check if the identifier match the extension name
if node.node.identifier == 'myapp.ext.MyExtension':
# I want to access node.__meta
print("==> type(node) = %s" % type(nod))
print("==> node.__dict__ = %s" % node.__dict__")
Что печатает:
==> type(node) = <class 'jinja2.nodes.Call'>
==> node.__dict__ = {
'kwargs': [],
# ... a bunch of other attributes
# The __meta attribute below is what I want to access
'__meta': {'type': 'checkbox', 'value': Const(value='checked'), 'name': Const(value='agree'), 'class': Const(value='bold')}
}
Поскольку переменная node
является экземпляром класса Call
, и я хочу получить доступ к его атрибуту __meta
, в соответствии с именем пользователя, я быдолжен сделать это так node._Call__meta
, но я получаю сообщение об ошибке:
`'Call' object has no attribute '_Call__meta'`
Что я делаю не так?