Форум сайта python.su
Не пойму что не так делаю…
class MyProtocol: TCP = 0 UDP = 1 class MyUDPConnection(object): def __init__(self): self.name = 'My UDP Connection' class MyTCPConnection(object): def __init__(self): self.name = 'My TCP Connection' class MySocket: def __init__(self, protocol=MyProtocol.TCP): self.protocol = protocol if self.protocol == MyProtocol.TCP: MyTCPConnection.__init__(self) elif self.protocol == MyProtocol.UDP: MyUDPConnection.__init__(self) print 'Created:', self.name sock = MySocket(MyProtocol.UDP) Traceback (most recent call last): File "C:\Project\Networking\MyConnection.py", line 25, in <module> test = MySocket(MyProtocol.UDP) File "C:\Project\Networking\MyConnection.py", line 21, in __init__ MyUDPConnection.__init__(self) TypeError: unbound method __init__() must be called with MyUDPConnection instance as first argument (got MySocket instance instead)
Отредактировано rubitwa (Апрель 5, 2015 19:02:16)
Офлайн
MyTCPConnection.__init__(self)
connection = MyTCPConnection()
Офлайн
потому что у MyUDPConnection и MyTCPConnection будут каллбэки OnConnected() OnDisconnected() OnIncomingPacket()
вот более понятный пример
class MyProtocol: TCP = 0 UDP = 1 class MyUDPConnection(object): def __init__(self): self.name = 'My UDP Connection' def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MyTCPConnection(object): def __init__(self): self.name = 'My TCP Connection' def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MySocket(object): def __init__(self, protocol=MyProtocol.TCP): self.protocol = protocol if self.protocol == MyProtocol.TCP: MyTCPConnection.__init__(self) elif self.protocol == MyProtocol.UDP: MyUDPConnection.__init__(self) print 'Created:', self.name def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MyClient(MySocket): def __init__(self, protocol): MySocket(protocol).__init__(self) def OnConnected(self): print 'Connected' def OnIncomingPacket(self, packet): print 'IncomingPacket:', packet def OnDisconnected(self): print 'Disconnected' test = MyClient(MyProtocol.UDP)
Отредактировано rubitwa (Апрель 5, 2015 19:48:19)
Офлайн
rubitwaДа хоть миллион колбэков, какая разница? В питоне так объекты не создают. Если не нужно создавать объект - не создавайте, есть декораторы classmethod и staticmethod. Но __init__ автоматически вызывается при создании объектов и никак иначе. Так как вы пытаетесь делать в питоне так объекты не создают и вообще методы классов так не используют.
будут каллбэки
# -*-coding:utf-8-*- class Connection(object): def __init__(self, conn_string): print("NEW object Connection created") self.conn_string = conn_string def process(self, data): print("Process with %s %s" % (self.conn_string, data)) class Singleton(object): @staticmethod def ping(): connection = Connection("lalalala") connection.process("dd@ff") class Foo(object): def __init__(self, connection): print("NEW object Foo created") self.connection = connection self.data = "dasdsdassdasd" def todo(self): print("Use Foo object") self.connection.process(self.data) c = Connection("fafafafa") f = Foo(c) f.todo() Singleton.ping()
Отредактировано FishHook (Апрель 5, 2015 20:06:26)
Офлайн
Всё, проблему решил.
class MyProtocol: TCP = 0 UDP = 1 class MyUDPConnection(object): def __init__(self): self.name = 'My UDP Connection' def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MyTCPConnection(object): def __init__(self): self.name = 'My TCP Connection' def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MySocket(MyTCPConnection, MyUDPConnection): def __init__(self, protocol=MyProtocol.TCP): self.protocol = protocol if self.protocol == MyProtocol.TCP: MyTCPConnection.__init__(self) elif self.protocol == MyProtocol.UDP: MyUDPConnection.__init__(self) print 'Created:', self.name def OnConnected(self): pass def OnIncomingPacket(self, packet): pass def OnDisconnected(self): pass class MyUDPClient(MySocket): def __init__(self): MySocket.__init__(self, MyProtocol.UDP) def OnConnected(self): print 'Connected' def OnIncomingPacket(self, packet): print 'IncomingPacket:', packet def OnDisconnected(self): print 'Disconnected' class MyTCPClient(MySocket): def __init__(self): MySocket.__init__(self, MyProtocol.TCP) def OnConnected(self): print 'Connected' def OnIncomingPacket(self, packet): print 'IncomingPacket:', packet def OnDisconnected(self): print 'Disconnected' client_udp = MyUDPClient() client_tcp = MyTCPClient()
Отредактировано rubitwa (Апрель 5, 2015 21:41:49)
Офлайн