Импортированный класс не знает локальных переменных - PullRequest
0 голосов
/ 10 июля 2020

У меня есть два файла (Backupfile.py и Backupfile2.py).

Следующее находится в Backupfile.py:

class Mater:
    def __init__(self):
        self.func()

    def func(self):
        from Backupfile2 import klasse

        newclass = klasse()

obj =[]
obj.append((1,1))
print(obj)

mater = Mater()

Теперь я хочу импортировать класс klasse из Backupfile2.py в Backupfile.py и добавить (2,2) в список obj.

Следующее находится в Backupfile2.py :

class klasse:
    def __init__(self):
        obj.append((2,2))
        print(obj)

Однако почему class klasse знает о переменной obj после ее импорта?

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Я не уверен в ответе, потому что я не эксперт и потому что я не понимаю, что вы хотите сделать, но я думаю, что вы пропустили объявление obj в классе "klasse", я думаю это должно быть что-то вроде

class klasse:
def __init__(self):
    self.obj = []
    self.obj.append((2,2))
    print(obj)

, или если вы хотите использовать объявление obj, которое вы выполнили, ваш код должен иметь вид

class Mater:
def __init__(self, obj):
    self.func(obj)

def func(self, obj):
    from Backupfile2 import klasse

    newclass = klasse(obj)

obj =[]
obj.append((1,1))
print(obj)

mater = Mater(obj)

, а затем ваш класс "klasse" должно быть

class klasse:
def __init__(self, obj):
    obj.append((2,2))
    print(obj)

Надеюсь поможет.

0 голосов
/ 10 июля 2020

Класс klasse не знает о переменной obj, потому что она не находится в той же области видимости. Переменные из локальных областей не используются совместно с переменными из класса. Одно простое решение - использовать ключевое слово global, но я бы не стал его использовать. Я бы подумал о передаче ссылки на obj в аргументах метода, например:

class Mater:
    def __init__(self, obj):
        self.obj = obj
        self.func()

    def func(self):
        from Backupfile2 import klasse

        newclass = klasse(self.obj)

obj =[]
obj.append((1,1))
print(obj)

mater = Mater(obj)
class klasse:
    def __init__(self, obj):
        obj.append((2,2))
        print(obj)

Помимо этого конкретного c вопроса, я бы посоветовал вам пройти курс для новичков по Python.

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