Может ли кто-нибудь помочь мне здесь?Поддержка объектов Python между отдельными функциями - PullRequest
1 голос
/ 27 августа 2010

Я написал эту простую программу на Python, чтобы помочь мне с ошибкой в ​​другой программе. Это ясно иллюстрирует проблему.

import copy

class Obj(object):
    def __init__(self, name):
        self.name = name

def one(o):
    print("1: o.name:", o.name) # "foo"
    obackup = copy.deepcopy(o) 
    o.name = "bar"
    print("2: o.name:", o.name) # "bar"
    print("3: obackup.name:", obackup.name) # "foo"
    o = obackup
    print("4: o.name:", o.name) # "foo"

def two(o):
    print("5: o.name:", o.name) # "bar"!

def main():
    o = Obj("foo")
    one(o)
    two(o)

main()

Я предполагаю, что o перезаписывается как локальная переменная функции one() Но я понятия не имею, как это исправить.

Ответы [ 2 ]

2 голосов
/ 27 августа 2010

Забудьте, что модуль copy существует, он почти никогда не нужен и часто дает удивительные результаты.

Как только вы говорите o = obackup в one(), вы создали новую привязку для формального аргумента, которая затем выходит из области видимости после print('4...

0 голосов
/ 27 августа 2010

o - это локальная переменная для one(), поэтому эту проблему нельзя решить элегантно Но вы могли бы использовать некоторые ссылка / указатель, который вы передаете one() и two().

Имитация указателей в Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...