Будет ли переменная класса возвращена к исходному значению самостоятельно в python? - PullRequest
0 голосов
/ 21 ноября 2018

Будет ли переменная класса когда-либо сбрасываться самостоятельно, когда экземпляр для этого конкретного класса все еще присутствует?У меня есть класс, и во время создания экземпляра объекта я обновляю переменную класса в init для будущего использования, когда у меня не будет доступа к созданному объекту.Я точно знаю, что объект не выходит за рамки, когда я пытаюсь получить доступ к этой переменной класса.Пример фрагмента приведен ниже.

Class A:
    var = ""
    def __init__(self,name):
        self.name = name
        A.var     = name
A_obj = A("John")

Я хочу использовать var (это «Джон») в более поздней части.когда я доберусь до этой части, значение «A.var» равно «», а не «John», как я ожидал. Полный код сложно опубликовать здесь.Итак, я только что представил базовый сценарий того, что происходит

1 Ответ

0 голосов
/ 22 ноября 2018

Нет.

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

def empty():
    print('empty')
    return ''


class A:
    var = empty()
    def __init__(self, name):
        self.name = name
        A.var     = name


obj_john = A('John')
print(A.var)

obj_mary = A('Mary')
print(A.var)

Большая разница заключается в регистрации пустых строковых назначений, что, кажется, является вашей главной задачей.Неудивительно, что полученное значение:

empty
John
Mary

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

Если вы неправильно используете import sв этом случае вам может удастся дважды вызвать пустое назначение, но вы не описали ни одно из этих взаимодействий.Установка точки наблюдения отладчика может оказаться полезной.Копайте немного дальше и делитесь с нами тем, что вы нашли.

...