我从来没有注意到__path__
今天之前在某些软件包上定义的属性。根据文档:
程序包支持另一个特殊属性
__path__
。它被初始化为一个列表,其中包含__init__.py
执行该文件中的代码之前包含软件包目录的目录名。这个变量可以修改;这样做会影响以后对包中包含的模块和子包的搜索。尽管通常不需要此功能,但可以使用它扩展软件包中的模块集。
有人可以向我解释这到底意味着什么,为什么我要使用它?
通常与pkgutil一起使用,以使软件包在磁盘上布局。例如,zope.interface和zope.schema是单独的发行版(zope
是“命名空间包”)。您可能在中安装了zope.interface
/usr/lib/python2.6/site-packages/zope/interface/
,而在中更本地地使用zope.schema
/home/me/src/myproject/lib/python2.6/site-packages/zope/schema
。
如果输入pkgutil.extend_path(__path__, __name__)
,/usr/lib/python2.6/site- packages/zope/__init__.py
则zope.interface和zope.schema都是可导入的,因为pkgutil将__path__
变为['/usr/lib/python2.6/site- packages/zope', '/home/me/src/myproject/lib/python2.6/site-packages/zope']
。
pkg_resources.declare_namespace
(Setuptools的一部分)类似,pkgutil.extend_path
但更了解路径上的zip
。
__path__
尽管在调试使用命名空间包的导入问题时查看变量很有用,但是手动更改并不常见,并且可能没有必要。
您还可以使用__path__
monkeypatching,例如,有时通过创建一个distutils/__init__.py
早于该文件的文件来进行monkeypatched
distutils sys.path
:
import os
stdlib_dir = os.path.dirname(os.__file__)
real_distutils_path = os.path.join(stdlib_dir, 'distutils')
__path__.append(real_distutils_path)
execfile(os.path.join(real_distutils_path, '__init__.py'))
# and then apply some monkeypatching here...
本文向大家介绍` `有什么用?相关面试题,主要包含被问及` `有什么用?时的应答技巧和注意事项,需要的朋友参考一下 被当做一个不可见的包裹元素,主要用于分组的条件判断和列表渲染。 https://blog.csdn.net/u013594477/article/details/80774483
问题内容: 我是Java的新手,刚刚遇到了在方法中使用“ Throws”关键字的教程。我对此进行了一些研究,但仍然不太了解。 从我到目前为止所看到的,它告诉编译器在该特定方法中可能抛出某些异常。为什么我们需要告诉编译器呢?我已经在我的方法中仅使用try- catch语句制作了许多程序,并且效果很好-当然,这些try-catch语句可以管理异常,对吗? 问题答案: 您可以使用和如您所说 在 方法 内
本文向大家介绍contextType是什么?它有什么用?相关面试题,主要包含被问及contextType是什么?它有什么用?时的应答技巧和注意事项,需要的朋友参考一下 定义当前组件要使用哪一个context
本文向大家介绍childContextTypes是什么?它有什么用?相关面试题,主要包含被问及childContextTypes是什么?它有什么用?时的应答技巧和注意事项,需要的朋友参考一下 childContextTypes用来定义context数据类型,该api从16.3开始已被废弃 使用方式
Java中Object有一个方法: public native int hashcode(); (1)hashcode()方法的作用 hashcode()方法主要配合基于散列的集合一起使用,比如HashSet、HashMap、HashTable。 当集合需要添加新的对象时,先调用这个对象的hashcode()方法,得到对应的hashcode值,实际上hashmap中会有一个table保存已经存进去
问题内容: 什么是反射,为什么有用? 我对Java特别感兴趣,但是我认为原理在任何语言中都是相同的。 问题答案: 名称反射用于描述能够检查同一系统(或本身)中的其他代码的代码。 例如,假设您在Java中有一个未知类型的对象,并且想在该对象上调用“ doSomething”方法(如果存在)。除非对象符合已知的接口,否则Java的静态类型化系统并不是真正为支持该类型而设计的,但是使用反射,您的代码可以