如何找到类和方法的实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
UN2758

如何找到类和方法的实现?

  •  
  •   UN2758 Nov 16, 2020 2408 views
    This topic created in 1991 days ago, the information mentioned may be changed or developed.
    1. socket 初始化之后 connect 方法和 getsockname 方法的实现位置怎么找啊?
    2. socket 类继承的是_socket.socket 父类,但是没看到父类的实现代码,这是猴子补丁吗,这样动不动就写个方法名,里面给个 pass 的类感觉很常见,但是找这种类的实现思路是啥呢?

    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 
    13 replies    2020-11-18 15:01:42 +08:00
    UN2758
        1
    UN2758  
    OP
       Nov 16, 2020
    wuwukai007
        2
    wuwukai007  
       Nov 16, 2020 via Android
    可能是 c 写的
    u823tg
        3
    u823tg  
       Nov 16, 2020
    这个不是可能是 c 写的。
    ho121
        4
    ho121  
       Nov 16, 2020 via Android
    类似 socket 这样的应该是调用的系统函数,具体实现实在系统中,当然没法直接看到源码
    DoctorCat
        6
    DoctorCat  
       Nov 16, 220
    这种类是 stub,用来告诉你继承关系和方法属性的,真正的实现是在 C 写的扩展库_socket 中,如果不做个 stub,你就不知道这库都包含哪些对象和相关方法属性了。
    lithbitren
        7
    lithbitren  
       Nov 17, 2020
    一般是去官方文档对应模块页面,然后在页首找到源码,点进去以后就是 5 楼那堆仓库链接了,python 部分应该是可以直接跳转的,可以发先是_socket.socket 引进来的,所以直接在仓库里搜_socket 也是可以定位的。
    UN2758
        8
    UN2758  
    OP
       Nov 17, 2020
    @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 里直接点击跳转找到呢?
    julyclyde
        9
    julyclyde  
       Nov 17, 2020
    @UN2758 IDE 是不是忽略标准库?
    rainfd
        10
    rainfd  
       Nov 17, 2020
    @UN2758 是你 ide 有问题吧,我用 vscode 能跳过去的
    no1xsyzy
        11
    no1xsyzy  
       Nov 17, 2020
    你是不是 import 路线上预编译的遮蔽了 .py
    UN2758
        12
    UN2758  
    OP
       Nov 17, 2020
    谢谢各位大佬,我看见了,但是真正的用 C 写的 SocketType 类是怎么加载到 python 里的呢,_socket.py 文件定义的是没实现方法的抽象类啊
    frostming
        13
    frostming  
       Nov 18, 2020
    @UN2758 楼上的回复你没好好看

    1. 实现是 C 语言,你跳不过去也看不了
    2. 你能跳过去只是因为 IDE(你用的大概是 Pycharm)放了一个 stub 文件,只是告诉你类里面有哪些成员,是个假的空壳
    About     Help     Advertise     Blog     API     FAQ     Solana     2632 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 47ms UTC 11:38 PVG 19:38 LAX 04:38 JFK 07:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86