3

モジュール内に次のデコレータがあります。

class CachedProperty(object):
    """Decorator that lazy-loads the value of a property.

    The first time the property is accessed, the original property function is
    executed. The value it returns is set as the new value of that instance's
    property, replacing the original method.
    """

    def __init__(self, wrapped):
        self.wrapped = wrapped
        try:
            self.__doc__ = wrapped.__doc__
        except:
            pass

    def __get__(self, instance, instance_type=None):
        if instance is None:
            return self

        value = self.wrapped(instance)
        setattr(instance, self.wrapped.__name__, value)

        return value

このデコレータと他のものを次のようなモジュールからインポートしたいと思います。

from clang.cindex import *

しかし、この方法でその単一のデコレータをインポートすることはできません。インポートすると機能します。

from clang.cindex import CachedProperty

その後、私は使用することができます@CachedProperty

他のクラスをインポートできるのに、なぜこのクラスをインポートできないの*ですか?

4

1 に答える 1

4

__all__モジュールの上部近くに definedという名前の変数があるかどうかを確認します。その場合、文字列名のシーケンス (リストまたはタプル) が割り当てられます。これらは、from ... import *ステートメントによってインポートされるモジュールの公開名です。

名前が定義されていない__all__場合、アンダースコアで始まらない、モジュールで定義されたすべての名前 (および他のモジュールからインポートされた名前) はパブリックと見なされます。

__all__シーケンスに文字列「CachedProperty」が含まれていることを確認してください。

于 2012-08-25T06:18:56.307 に答える