#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
недопустима.