为什么使用apt.Cache创建的对象,而不是apt.cache.Cache()(Why objec

2019-10-22 05:01发布

我在一个点stucked,我不能进步,对不起这个愚蠢的问题。 我搜索了很多针对但我可能不知道我是错过了什么。 请帮我。

我学的模块和类的蟒蛇。 现在,我要让使用python和容易一些操作。 我从研究: http://apt.alioth.debian.org/python-apt-doc/library/apt.cache.html但是,我无法理解,该模块是apt.cache,如图所示在页面顶部。 我预期目的应通过写apt.cache.Cache()创建,但通过写入apt.Cache()创建的对象,如下所示。 为什么?

    import apt
    import apt.progress

    # First of all, open the cache
    cache = apt.Cache()
    # Now, lets update the package list
    cache.update()
    # We need to re-open the cache because it needs to read the package list
    cache.open(None)
    # Now we can do the same as 'apt-get upgrade' does
    cache.upgrade()
    # or we can play 'apt-get dist-upgrade'
    cache.upgrade(True)
    # Q: Why does nothing happen?
    # A: You forgot to call commit()!
    cache.commit(apt.progress.TextFetchProgress(),
                 apt.progress.InstallProgress())

第二个类似的问题是关于下面的代码,Cache类是从模块apt.cache进口。 我预计,对象将通过编写apt.cache.Cache()创建,但它是通过写apt.Cache()创建。 为什么?

    >>> from apt.cache import FilteredCache, Cache, MarkedChangesFilter
    >>> cache = apt.Cache()
    >>> changed = apt.FilteredCache(cache)
    >>> changed.set_filter(MarkedChangesFilter())
    >>> print len(changed) == len(cache.get_changes()) # Both need to have same length
    True

提前致谢

Answer 1:

如果你看一下__init__.py的APT的文件包 ,你看行:

__all__ = ['Cache', 'Cdrom', 'Package']

蟒蛇的文件说:

import语句如下约定:如果一个包的__ init__.py代码定义了一个名为所有的列表,它被视为是从包导入*时应该导入的模块名称的列表。

这就是为什么你可以使用的原因apt.Cache()

对于你的问题的第二部分,你可以直接导入缓存类

from apt.cache import Cache
cache = Cache()

您也可以导入缓存类

import apt
cache = apt.Cache()       //because of the __all__ variable in __init__.py
cache = apt.cache.Cache() //because it's a fully qualified name


文章来源: Why object is created using apt.Cache rather than apt.cache.Cache()