gpt4 book ai didi

python - Python 中的子类化和内置方法

转载 作者:太空狗 更新时间:2023-10-29 22:20:10 25 4
gpt4 key购买 nike

为了方便起见,我想继承 socket 来创建一个 ICMP 套接字:

class ICMPSocket(socket.socket):
def __init__(self):
socket.socket.__init__(
self,
socket.AF_INET,
socket.SOCK_RAW,
socket.getprotobyname("icmp"))

def sendto(self, data, host):
socket.socket.sendto(self, data, (host, 1))

但是,我无法覆盖 socket.sendto:

>>> s = icmp.ICMPSocket()
>>> s.sendto
<built-in method sendto of _socket.socket object at 0x100587f00>

这是因为sendto是一个“内置方法”。根据data model reference ,这“实际上是内置函数的另一种伪装,这次包含一个作为隐式额外参数传递给 C 函数的对象。”

我的问题:在子类化时是否有覆盖内置方法的方法?

[编辑] 第二个问题:如果不是,为什么不呢?

最佳答案

我知道这不能回答您的问题,但您可以将套接字放入一个实例变量中。这也是 Nobody 在评论中提出的建议。

class ICMPSocket():
def __init__(self):
self.s = socket.socket(
socket.AF_INET,
socket.SOCK_RAW,
socket.getprotobyname("icmp"))
def sendto(self, data, host):
self.s.sendto(data, (host, 1))
def __getattr__(self, attr):
return getattr(self.s, attr)

关于python - Python 中的子类化和内置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6976094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com