21

Re: Класи в Пайтон

Q-bart написав:

Знову виникло запитання.
Наприклад, такий код.

class TestClass():
    def __init__(self):
        self.b = 124


class hello():
    def __init__(self):
        print TestClass.b

c = TestClass()
v = hello()

Тепер, мені треба отримати доступ до b з першого класу в другому класі.
Виводить

AttributeError: class TestClass has no attribute 'b'

Дивіться, змінні в класі можуть бути або статичними, або нестатичними. Перші належать усьому класу, другі — екземплярові класу. У цьому прикладі змінна b ініціалізується як нестатична (якщо ми бачимо self.ім'я_змінної в методі класу, це нестатична змінна), а потім її намагаються прочитати як статичну (що не працює: змінна лежить у конкретному екземплярі, в самому ж класі її нема). Хоча такий код можливий:

test_class_instance=TestClass #створюємо екземпляр класу
print test_class_instance.b #Беремо з нього нестатичну змінну

Якщо ж нам потрібна статична змінна, треба було зробити як Kane:

class TestClass():
    b = 124
Подякували: Q-bart1

22 Востаннє редагувалося Q-bart (01.05.2015 06:47:10)

Re: Класи в Пайтон

Щось мені не виходить розібратися, можливо через те що використовую потоки в PyQt4.
Отже, є клас - вікно. В ньому метод tracking(повністю код не викладав, щоб було зрозуміліше). І з цього методу мені треба передати дані, які потрібні для виконання коду в окремому потоці.

class window(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)

        self.setGeometry(100, 100, 500, 200)
        self.setWindowTitle('Hello')
        self.label = QtGui.QLabel(u'WoRLd', self)
        self.Layout = QtGui.QVBoxLayout()
        self.Layout.addWidget(self.label)
        self.setLayout(self.Layout)
        self.tracking(introduced)
    
    def tracking(self, link):
        self.a = link
       
        self.request = Requests()
        self.request.start()

 
class Requests():
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)
    
    def run(self):
        window.__init__(self)
        self.tracking()
        print self.a        
        

23

Re: Класи в Пайтон

Знайшов таке рішення:

class window(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
 
        self.setGeometry(100, 100, 500, 200)
        self.setWindowTitle('Hello')
        self.label = QtGui.QLabel(u'WoRLd', self)
        self.Layout = QtGui.QVBoxLayout()
        self.Layout.addWidget(self.label)
        self.setLayout(self.Layout)
        self.tracking(introduced)
    
    def tracking(self, link):
        self.a = link
       
        self.request = Requests(self.a)
        self.request.start()
 
 
class Requests():
    def __init__(self, some_data, parent=None):
    self.data = data  
    QtCore.QThread.__init__(self, parent)
    
    def run(self):
        window.__init__(self)
        self.tracking()
        print self.a   
Подякували: Djalin1