-1

我法语对不起我的英语,

我尝试将我的 c# 代码转换为 python,但我遇到了这个问题。

我在这个地址找到了代码 python 的类事件:http ://www.voidspace.org.uk/python/weblog/arch_d7_2007_02_03.shtml#e616

我会尝试在我的 python 代码中实现这个。

我的 C# 代码:

// using
...

public abstract class SocketBase
{
     public delegate void _onConnected();
     public event _onConnected OnConnected;

     public SocketBase()
     {
          ...
     }

     public void TestEvent()
     {
           OnConnected();
     }
}

public class SocketClient : SocketBase
{
     public SocketClient()
     {
           base.OnConnected += Connected;
           base.TestEvent();
     }

     public void Connected()
     {
          // print
     }
}

还有我的python代码:

from EventHook import *

class SocketBase(object):
    def __init__(self):
        self.onConnected = EventHook()

        def TestEvent(self)
            self.onConnected.fire()

class SocketClient(SocketBase):
    def __init__(self):
            SocketBase.__init__(self)
            # How to access at the base class event from the child class ?
        SocketBase.onConnected += self.Connected
        SocketBase.TestEvent(self)

    def Connected(self):
        print "Connected :) !"

你能帮我吗 ?

昆汀。

4

2 回答 2

0

您的 SocketClient__init__和 def TestEvent 缩进已关闭,这可能会让您有些悲伤。然后,我看到你使用的是 python 2.7,所以你可能想用super 方法重构你的继承。这也可能是您想要访问父方法和属性的方式。

from EventHook import *

class SocketBase(object):
    def __init__(self):
        self.onConnected = EventHook()

    def test_event(self)
        self.onConnected.fire()

class SocketClient(SocketBase):
    def __init__(self):
        super(SocketBase).__init__(self)    
        self.onConnected += self.connected  # don't know what eventhook() returns
        self.test_event()

    def connected(self):
        print "Connected :) !"

s = SocketClient()

因为 python 是动态类型的,所以不同的样式约定有助于区分类型。pep8

于 2013-08-31T20:30:25.560 回答
0

谢谢,但我别无选择,我必须使用 python 2.2:x

所以,我试过你的代码,但python编译器说“TypeError:super()参数1必须是类型,而不是SocketClient”然后我尝试这样:

super(SocketClient, self).__init__()

它可以工作,但我的 onConnected 变量不可用,然后我试试这个:

from EventHook import *

class SocketBase(object):
    on_connected = EventHook()

    def __init__(self):
         pass

    def test_event(self):
         self.on_connected.fire()

class SocketClient(SocketBase):
    def __init__(self):
        super(SocketClient, self).__init__()
        self.on_connected += self.Connected
        self.test_event()

    def Connected(self):
        print "Connected :) !"

s = SocketClient()

Output :
Connected :) !

感谢您的帮助。

于 2013-09-01T12:23:45.760 回答