о сценариях Python - PullRequest
       6

о сценариях Python

1 голос
/ 30 апреля 2010

У меня есть этот код

 class HNCS (ThreadingTCPServer):

    def verify_request(self, request, client_address):

        for key in connections:

            if connections[key].client_address[0] == client_address[0]:

                if client_address[0] != '127.0.0.1':

                    return False

        return True

    def welcome(self):

        return '''______________________________________________________
------------------------------------------------------
%s
______________________________________________________
------------------------------------------------------
* Server started %s
* Waiting for connections on port %i
''' % (gpl, ctime(), PORT)

Я не могу понять, где написано если соединения [ключ] .client_address [0] == client_address [0]

почему мы использовали client_address в качестве атрибута после словаря ???

Ответы [ 3 ]

2 голосов
/ 30 апреля 2010

Возможно, словарь хранит значения, которые являются объектами, которые имеют свойство члена client_address?

Другими словами, .client_address там не - это то же самое, что client_address, переданный в качестве аргумента. Вместо этого это имя поля в классе, которое хранится в connections[key].

1 голос
/ 30 апреля 2010
    for key in connections:
        if connections[key].client_address[0] == client_address[0]:

Это просто просмотр всех значений, хранящихся в словаре connections, чтобы определить, имеет ли какое-либо из их свойств с именем client_address тот же первый элемент (IP-адрес), что и у локальной переменной client_address. Для переменной не обязательно иметь то же имя, что и у свойства значения в словаре.

То, что он говорит: прервать соединение, если другое соединение с тем же IP-адресом уже обслуживается. (За исключением localhost, которому разрешено иметь столько соединений, сколько ему нужно.)

Это можно переписать как:

def verify_request(self, request, new_client_addr):
    ip= new_client_addr[0]
    active_ips= [value.client_address[0] for value in connections.values()]
    return ip not in active_ips or ip=='127.0.0.1'
1 голос
/ 30 апреля 2010

Поскольку в словаре connections может быть объект с атрибутом client_address?

как:

class SomeClass(object):
     def __init__( self, address ) :
          self.client_address = address

connections = {"oscar":SomeClass(["127.0.0.1","192.60.0.1"])}

for key in connections:
    print connections[key].client_address[0]

редактировать

A dict - это словарь, в котором значение может быть сохранено с использованием ключа. Когда вы снова запрашиваете этот ключ, вы возвращаете значение, это так просто.

Итак, в моем предыдущем примере строка:

connections = {"oscar":SomeClass(["127.0.0.1","192.60.0.1"])}

Может быть написано как:

connection = []
connections["oscar"] = SomeClass(["1","2"])
s = connections["oscar"]

В вашем комментарии test[self.name] = self вы сохранили объект, представленный self, в словарь test, используя name в качестве ключа.

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