python 代码如下
import socket
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
1
UN2758 OP |
2
wuwukai007 2020-11-16 18:42:25 +08:00 via Android
可能是 c 写的
|
3
u823tg 2020-11-16 19:30:27 +08:00
这个不是可能是 c 写的。
|
4
ho121 2020-11-16 19:37:44 +08:00 via Android
类似 socket 这样的应该是调用的系统函数,具体实现实在系统中,当然没法直接看到源码
|
5
julyclyde 2020-11-16 19:42:13 +08:00
|
6
DoctorCat 2020-11-16 19:44:36 +08:00
这种类是 stub,用来告诉你继承关系和方法属性的,真正的实现是在 C 写的扩展库_socket 中,如果不做个 stub,你就不知道这库都包含哪些对象和相关方法属性了。
|
7
lithbitren 2020-11-17 04:10:55 +08:00
一般是去官方文档对应模块页面,然后在页首找到源码,点进去以后就是 5 楼那堆仓库链接了,python 部分应该是可以直接跳转的,可以发先是_socket.socket 引进来的,所以直接在仓库里搜_socket 也是可以定位的。
|
8
UN2758 OP @wuwukai007 #2
@u823tg #3 @ho121 #4 @julyclyde #5 @DoctorCat #6 @lithbitren #7 感谢各位大佬的帮助 https://github.com/python/cpython/blob/master/Lib/socket.py#L51 这个 socket.py 文件为啥不能从 IDE 里直接点击跳转找到呢? |
11
no1xsyzy 2020-11-17 14:58:29 +08:00
你是不是 import 路线上预编译的遮蔽了 .py
|
12
UN2758 OP 谢谢各位大佬,我看见了,但是真正的用 C 写的 SocketType 类是怎么加载到 python 里的呢,_socket.py 文件定义的是没实现方法的抽象类啊
|