gri*_*ton 6 python subclassing
为方便起见,我想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))
Run Code Online (Sandbox Code Playgroud)
但是,我无法覆盖socket.sendto:
>>> s = icmp.ICMPSocket()
>>> s.sendto
<built-in method sendto of _socket.socket object at 0x100587f00>
Run Code Online (Sandbox Code Playgroud)
这是因为它sendto是一种"内置方法".根据数据模型引用,这"实际上是内置函数的不同伪装,这次包含作为隐式额外参数传递给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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |