2015-02-03 2 views
-1

Почему я получаю ошибку listed is not defined в следующем фрагменте кода?Ошибка «указана не указана» в классе Python

import socket,select 
from threading import * 
import time 

neighbours=[] 
def neighbourfuncall(): 
    print('In neighbours') 

class pyserver(Thread): 
    dictn={} 
    HOST=socket.gethostname() 
    PORT=8888 
    buf=1024 
    ADDR=(HOST,PORT) 
    listed=[] 
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
    sock.bind(ADDR)  
    sock.listen(30) 

    def __init__(self): 
     self.interval=6 
     listed.append(sock) 
     thread=threading.Thread(target=neighbourfuncall,args=()) 
     thread.daemon=True 
     thread.start() 
    def run(self): 
     while True: 
      sel,out,spl=select.select(listed,[],[],15.0) 
      for s in sel: 
       if s==sock: 
        client,address=sock.accept() 
        listed.append(client) 
        dest=client.recv(buf) 
        dictn[client]=dest  
       else: 
        pass 

serv=pyserver() 
serv.run() 
+0

Почему я получаю ошибку - «перечисленные» не определены, если я уже определил ее как переменную класса? Вышеприведенный код - это всего лишь краткая информация о сервере, который я собираюсь построить ..... У меня только проблемы с созданием экземпляра ... –

+0

@BhargavRao Хорошо ... так что если я инициализирую пустой список, тогда он должен быть выполняется непосредственно внутри --init -()? –

+0

Нет ... Я не знал, что вы хотите, чтобы они были переменными класса. Извините, моя ошибка –

ответ

2

Вы должны получить доступ к listed со следующим синтаксисом:

pyserver.listed = ["I need to study more Python!"] 

, так как это переменная статический класс.

1

Поскольку вы находитесь в классе, вам необходимо использовать self.list.append(smth). Все переменные класса должны быть доступны с помощью self.

Кстати, операции сокета должны быть в __init__(). Вы бы лучше сделать это:

def __init__(self): 
    self.smth=socket() 
    self.other=[] 
    self.smth.DoSomething() 
def Hello(self): 
    self.other.append("Hello") #just example 
Смежные вопросы