2013-05-20 2 views
0

Я работал над модулем, который принимает имя файла и строку файла и создает переменную, определенную пользователем, и она работает. Но я хочу, чтобы переменная быть в глобальном пространстве имен здесь есть код:Как создать переменную в модуле в глобальном пространстве имен?

def Int(file, line, variable): 
    file = open(file, "r") 
    for i in range(line): 
     whatToConvert = file.readline() 
    file.close 
    globals()[variable] = int(whatToConvert) 

def Str(file, line, variable): 
     file = open(file, "r") 
     for i in range(line): 
      whatToConvert = file.readline() 
     file.close 
     globals()[variable] = str(whatToConvert) 

def Float(file, line, variable): 
     file = open(file, "r") 
     for i in range(line): 
      whatToConvert = file.readline() 
     file.close 
     globals()[variable] = float(whatToConvert) 

Если я импортировать конвертировать затем сделать convert.Int («test.txt», 1, «var_1»), то вар (» var_1 ") доступен через convert.var_1, а не var_1, как я могу сделать var_1 в глобальном пространстве имен?

ответ

0

Вы хотите класс, братан.

class Converter: 

    def __init__(self, fl, ln, vrbl): 
     self.file = fl 
     self.line = ln 
     self.variable = vrbl 


    def to_int(self): 
     file = open(self.file, "r") 
     for i in range(self.line): 
      whatToConvert = file.readline() 
     file.close 
     return int(whatToConvert) 

    def to_str(self): 
     file = open(self.file, "r") 
     for i in range(self.line): 
      whatToConvert = file.readline() 
     file.close 
     return str(whatToConvert) 

    def to_float(self): 
     file = open(self.file, "r") 
     for i in range(self.line): 
      whatToConvert = file.readline() 
     file.close 
     return float(whatToConvert) 


#Instantiation 
foo = Converter('\a\path','an int?','') 

#This is how you call the class methods. 
foo.to_int() 
foo.to_str() 
foo.to_float() 

Я не знаю точно, как должен выглядеть ваш вход, но вы можете получить то, что хотите от этого. И вы можете хранить определения классов в других файлах и импортировать их точно так же, как модули.

from filename import Converter

Тогда вы просто экземпляр, и т.д., как я написал. Это может изменить некоторые из того, что вы предусмотрели для своей программы, но это тоже облегчит вам задачу.

__init__() функция происходит на линии, где вы делаете foo = Converter('\a\path','an int?','') Вы можете хотеть думать о помещении open о там, а затем сохранить значения переменных с именами, как self.variable. Затем в любом месте класса вы можете сделать ссылку на self.variable. Обратите внимание, что self является первым аргументом для каждого определения метода. self означает сам объект. Могут быть много способов сделать класс, который делает то, что вы хотите.

+0

Увидев, что ваши методы 'to_x' не используют' self' вообще, я уверен, что он просто хочет кучу функций. Python - это не Java, где вы должны создавать поддельные классы для группировки, что действительно должно быть функциями. – Bakuriu

+0

Класс наиболее подходит для меня, если он хочет поделиться теми же данными между этими различными функциями, о чем он говорил. Я использую 'self'. – mrKelley

+0

Я думаю, что класс будет работать. Благодарю. – StingingEagle

0

Docs из globals() состояния его явно, что это модуль мудрого глобального словаря

возвращает словарь, представляющий текущую глобальную таблицу символов. Этот всегда является словарем текущего модуля (внутри функции или метода , это модуль, где он определен, а не модуль от , который он вызывается).

Вы можете передать globals() в качестве аргумента (это будут глобальные значения из текущего модуля). Все еще возиться с глобальными, особенно в этом смысле, выглядит очень плохой идеей.

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