来自Objective-C和Swift,我在Python中实现了以下模式,以便在Python中使用基于协议的委托,就像在Swift或Obj-C中那样:
class DataReceiverDelegate:
def data_receiver_did_receive_data(self, data):
pass
def data_receiver_did_update_settings(self):
pass
class DataReceiver
def __init__(self, delegate = None):
self.delegate = delegate
def received_data(self, data):
self.delegate.data_receiver_did_receive_data(data)
我是这样使用它的:
应该充当委托的类只是从DataReceiverDelegate
类继承。在
这一点没有问题,而且与Swift非常相似,其中协议也是类(或结构,不太确定)。在
我担心这样用Python实现委托会导致奇怪的问题,或者绝对不可能。那么这样处理授权安全吗?在
由于我目前对Python中的内存处理一无所知,我不确定这是否会因为“强引用循环”而导致死锁。那么,有没有一种方法来定义像“弱”类型的东西呢?在
唯一的问题是,委托给(DataReceiver
)的类不知道self.delegate
是什么类型,因此编辑器中的代码完成无法工作。在
编辑:
这是一个简单的例子,只是为了展示我的目标。在现实世界中,我们将添加检查以确保委托不是None
。与Swift中的“安全展开选项”非常相似。在
你做的看起来不错。您甚至可以省去
DataReceiverDelegate
类,因为方法只在运行时找到,或者您可以将它作为抽象基类,用于一些额外的安全性和静态分析。在Python2.7可以在其垃圾回收中处理引用循环,尽管更少的周期可能更好。如果你担心的话,你也可以查看弱引用。在
PyCharm中的类型暗示可以指示
self.delegate
的类型。在相关问题 更多 >
编程相关推荐