2016-12-22 4 views
0

, предполагающей, у меня есть модуль Python называется mymodule, он имеет следующую структуру:Python: __getattr__ для объекта модуля

""" mymodule.py """ 

mydata = { 
    "x": 12, 
    "y": 58 
} 

Я хочу, чтобы получить доступ к данным, следующим образом:

""" main.py """ 
import mymodule 

print(mymodule.x) # 12 
print(mymodule.y) # 58 

Что следует добавить к mymodule.py?

Я хотел бы знать решения для Python 2.7 и Python 3.

+0

Посмотрите http://stackoverflow.com/questions/4984647/accessing-dict-keys-like-an-attribute-in-python –

+0

@UriShalit Мне нужно решение для модуля, а не для класса. – Fomalhaut

+0

Проверьте http://stackoverflow.com/questions/2447353/getattr-on-a-module - довольно полный ответ – user783836

ответ

0

Вариант 1

Если только данные x и y, и вы не хотите его динамический вы можете сделать что-то вроде:

""" mymodule.py """ 

mydata = { 
    "x": 12, 
    "y": 58 
} 

x = mydata['x'] 
y = mydata['y'] 

Вариант 2

Другой вариант заключается в использовании addict.Dict, но для импорта потребуется немного изменить.

""" mymodule.py """ 
from addict import Dict 

mydata = Dict({ 
    "x": 12, 
    "y": 58 
}) 

И затем использовать его:

""" main.py"" 
from mymodule import mydata 

print(mydata.x) 
print(mydata.y) 

Было бы легче понять, почему вам это нужно ...

1

По https://stackoverflow.com/a/7668273/783836, кажется, может быть сделано путем замены модуль с классом, который делает то, что вы хотите:

# module foo.py 

import sys 

class Foo: 
    def funct1(self, <args>): <code> 
    def funct2(self, <args>): <code> 

sys.modules[__name__] = Foo() 

Отметьте все сообщения для полной информации ils

+0

Работает ли он на 'Python 2.7' и' Python 3'? – Fomalhaut

Смежные вопросы