gpt4 book ai didi

python - 为什么这个装饰器不能从带有 "from module import *"的模块导入?

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:56 24 4
gpt4 key购买 nike

我在模块中有以下装饰器:

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

为什么我不能通过 * 导入这个类,而我可以导入其他类?

最佳答案

查看是否在模块顶部附近定义了名为 __all__ 的变量。如果是这样,它将有一个字符串名称序列(列表或元组)分配给它。这些是通过 from ... import * 语句导入的模块的公共(public)名称。

如果没有定义 __all__ 名称,模块中定义的所有名称(以及从其他模块导入的名称)不以下划线开头,都被认为是公开的。

确保 __all__ 序列包含字符串“CachedProperty”。

关于python - 为什么这个装饰器不能从带有 "from module import *"的模块导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12119281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com