Как я это делаю, создавая класс контейнера.
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class QOTD(Protocol):
def connectionMade(self):
self.factory.message_siblings("Got a client")
self.transport.loseConnection()
class MyFactory(Factory):
protocol = QOTD
def __init__(self,root,name):
self.clients = []
self.root = root
self.name = name
#self.root.add_child(name,self)
def message_siblings(self,message):
self.root.message_children(self.name,message)
def message_sibling(self,message):
self.root.message_child(self.name,message)
def get_message(self,name,message):
#do something here
print name,message
class Container(object):
def __init__(self):
self.servers = {}
def add_child(self,obj,name):
self.servers[name] = obj(self,name)
def message_children(self,name,message):
for server in self.servers:
if server != name:
self.servers[server].get_message(name,message)
def message_child(self,name,message):
if name in self.servers.keys():
self.servers[server].get_message(name,message)
container = Container()
container.add_child(MyFactory,'test')
container.add_child(MyFactory,'test2')
reactor.listenTCP(8007, container.servers['test'])
reactor.listenTCP(8008, container.servers['test2'])
reactor.run()
Это может быть не лучший метод, но он работает и позволяет использовать некоторую гибкость
Подумайте о ком-то, кто делает help (yourmodule)
по подсказке интерактивного интерпретатора - что они хотят, чтобы знали? (Другие методы извлечения и отображения информации примерно эквивалентны help
с точки зрения количества информации). Итак, если у вас есть в x.py
:
"""This module does blah blah."""
class Blah(object):
"""This class does blah blah."""
, то:
>>> import x; help(x)
показывает:
Help on module x:
NAME
x - This module does blah blah.
FILE
/tmp/x.py
CLASSES
__builtin__.object
Blah
class Blah(__builtin__.object)
| This class does blah blah.
|
| Data and other attributes defined here:
|
| __dict__ = <dictproxy object>
| dictionary for instance variables (if defined)
|
| __weakref__ = <attribute '__weakref__' of 'Blah' objects>
| list of weak references to the object (if defined)
Как вы видите, подробная информация о классах (и функциях тоже, хотя я не показываю одну здесь) уже включен из строк документации этих компонентов; собственная строка документации модуля должна описывать их очень кратко (если вообще) и концентрироваться на кратком изложении того, что модуль в целом может сделать для вас, в идеале с некоторыми документированными примерами (точно так же, как функции и классы, в идеале должны иметь документированные примеры в их строки документации).
Я не понимаю, как метаданные, такие как имя автора и авторские права / лицензия, помогают пользователю модуля - их лучше оставить в комментариях, так как они могут помочь кому-то при рассмотрении вопроса о том, следует ли повторно использовать или модифицировать модуль.