2017-01-21 2 views
0

Следующие assign.py должны правильно отправить значение class1.py. Однако возврат печати 0.0. Я сделал dict как статический, поэтому я могу назначить его из внешнего файла. Я что-то упускаю?Назначение значений статическому атрибуту извне файла

class1.py

class Class1(): 
    dict = {} 

    def set_dictionary(x,y,z): 
     if (x, y) not in Class.dict: 
      Class1.dict[(x, y)] = 0.0 
     Class1.dict[(x,y)] = z 
     print ("(%s --> %s) = %s" % (x,y,z)) 

assign.py

import class1 as cnt 

cnt.Class1.set_dictionary('s1','s2', 100) 
+4

Вы должны использовать класс. –

+0

Ваш код не работает («Класс» не определен), но когда я его исправлю, он работает как ожидалось. Я не могу дублировать. – tdelaney

+0

Что вы пытаетесь сделать с этим кодом? Существует обычный способ делать объектно-ориентированное программирование на Python. Язык позволяет вам нарушать эти соглашения. Но обычно это плохая идея. В этом случае не совсем ясно, что вы ожидаете от этого кода. –

ответ

1

Как указывается в комментариях, classmethod это путь:

# class1.py 
class Class1(object): 
    dic = {} # don't shadow built-ins 

    @classmethod 
    def set_dictionary(cls, x, y, z): 
    cls.dic[(x,y)] = z 
    print ("(%s --> %s) = %s" % (x, y, z)) 

# assign.py 
import class1 as cnt 
cnt.Class1.set_dictionary('s1','s2', 100) 

>>> Class1.set_dictionary('s1','s2', 100) 
(s1 --> s2) = 100 

Подробнее на the different kinds of methods in Python.

+0

Спасибо большое :) –

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