атрибуты вызывающих классов доступа

#python

#python

Вопрос:

У меня есть 2 класса, определенные как таковые

 class class1():
    self.stuff = 1
    def blah(self):
        foo = class2()
        foo.start()

class class2(threading.Thread):
    def run(self):
       #access class1.stuff
  

Как бы я получил доступ к class1.stuff из class2

Комментарии:

1. В вашем примере недопустимый python. self не определен в телах классов. Чего вы пытаетесь достичь? self Определен ли он в какой-то внешней области?

Ответ №1:

Это может выглядеть следующим образом:

 class class1(object):
    stuff = 1
    def blah(self):
        foo = class2()
        foo.start()

class class2(threading.Thread):
    def run(self):
       print(class1.stuff)
  

Не существует специального синтаксиса для «доступа к атрибутам вызывающих классов». Если вы хотите получить доступ к объекту, вы должны присвоить ему видимое имя, например, передав его в __init__ или используя объект класса, подобный этому.

Комментарии:

1. Нет ли способа динамически определить, какой объект создал экземпляр class2, и ссылаться на его атрибуты из самого class2? в частности, если более 1 класса создают экземпляры class2, но все они имеют определенный общий атрибут, на который я хочу сослаться?

2. @T_Mac: Нет, не в Python, и я думаю, что почти все языки избегают подобной магии, как чумы.

Ответ №2:

Вам пришлось бы передать это в функцию.

 class class1():
    self.stuff = 1
    def blah(self):
        foo = class2()
        foo.start(self)

class class2(threading.Thread):
     def run(self, obj):
        obj.stuff;
  

Невозможно получить доступ к свойствам другого объекта, не имея ссылки на объект. Самый простой способ получить ссылку на объект class1 — это запросить его в качестве аргумента.

Комментарии:

1. Как указал @rincewind выше, self определяется не внутри class инструкции, а вне метода, поэтому первая строка определения class1 недопустима.