zoukankan      html  css  js  c++  java
  • 问题:经典类的对象明明没有__class__属性,却可以调用。

    这个问题得深入python源码才能看。

    1 class a:
    2  pass
    3 aa =a()
    4 print dir(aa)#aa只有doc和module属性
    5 print aa.__class__#__main__.a

    2.关于os.path和posixpath

    以下一段话引用自某网友:

    我们可以从sys.modules中找到当前已经加载的模块,sys.modules是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

    最后一句话很关键,该字典决定了导入模块时是否需要重新导入,也就是说,python解释器是参考这个字典来决定导入模块时要不要重新导入。而且导入新模块的同时,将新模块加入该字典。

    还有,可用模块的__file__属性查看模块文件的位置

    以上两点是需要知道的,下面说问题:

    用sys.modules可查看到,(qpython安卓版)

    'os.path':<module 'posixpath' from '/data/user/0/com.hipipal.qpyplus/files/lib/python27.zip/posixpath.py'>

    'posixpath':<module 'posixpath' from '/data/user/0/com.hipipal.qpyplus/files/lib/python27.zip/posixpath.py'>

    'os':<module 'os' from '/data/user/0/com.hipipal.qpyplus/files/lib/python27.zip/os.py'>

    可以看到,os是模块而不是那种包含很多模块的文件夹。

    而os.path模块就是posixpath模块。这是怎么做到的呢?我猜想,应该是os.py源文件中,有这样一行代码,import posixpath as path

    下面我们做个实验验证一下猜想。

    c.py

    1 print "haha"
    2 def cc():
    3     print "haha"

    a.py

    1 import c as b
    2 b.cc()

    test.py

    1 import a
    2 a.b.cc()
    3 import sys
    4 print sys.modules['a']
    5 print sys.modules['c']
    6 print sys.modules['a.b']

    将以上仨文件保存,然后运行test.py,下面是运行结果:

    haha

    haha

    haha

    <module 'a' from '/storage/emulated/0/qpython/scripts/a.py'>

    <module 'c' from '/storage/emulated/0/qpython/scripts/c.py'>

    Traceback (most recent call last):

      File "/storage/emulated/0/qpython/scripts/test.py", line 7, in <module>

        print sys.modules['a.b']

    KeyError: 'a.b'

    可以看到,a.b等同于c模块,b在a中是c模块的别名,我们可以用a.b来调用c模块的属性和方法。就如同,os.path等同于posixpath模块。

    但是最终的问题来了,为什么在字典中存在os.path,却不存在a.b?(客从最后一个报错中看出来),并且,我们可以直接导入os.path(import os.path),却不可以import a.b(报错,no module named b)?

    这说明,在os.py文件中,除了有import posixpath as path ,还有额外的代码,使得os.path可以直接导入,这些代码究竟是什么,等以后看源码的时候看

  • 相关阅读:
    物联网市场碎片化严重 物联网网关设计挑战重重
    物联网市场碎片化严重 物联网网关设计挑战重重
    物联网市场碎片化严重 物联网网关设计挑战重重
    越做越大的行李寄存生意,老板竟是3个95后
    互联网人失业理由排行榜,每一个都戳破职场真相
    读小说赚钱吗?这个年入百万
    BI驾驶舱的必备知识
    2019开源BI软件排行榜
    主流的开源bi工具
    企业为什么需要BI决策系统?
  • 原文地址:https://www.cnblogs.com/saolv/p/8360933.html
Copyright © 2011-2022 走看看