Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2015 18:51:23

rubitwa
Зарегистрирован: 2015-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите построить класс

Не пойму что не так делаю…

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)

Офлайн

#2 Апрель 5, 2015 19:14:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите построить класс

MyTCPConnection.__init__(self)
а зачем вы инит вызываете?
connection = MyTCPConnection()



Офлайн

#3 Апрель 5, 2015 19:42:51

rubitwa
Зарегистрирован: 2015-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите построить класс

потому что у 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)

Офлайн

#4 Апрель 5, 2015 20:04:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите построить класс

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)

Офлайн

#5 Апрель 5, 2015 21:41:24

rubitwa
Зарегистрирован: 2015-03-28
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите построить класс

Всё, проблему решил.

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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version