首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找不到类名上的类方法

找不到类名上的类方法
EN

Stack Overflow用户
提问于 2022-04-11 08:45:47
回答 1查看 87关注 0票数 1

我试图在类名.AttributeError问题上调用类方法

当我使用@singleton时,我不能使用classname.functionname运行,它必须是classname().functionname,为什么会发生这种情况?

代码语言:javascript
运行
复制
def singleton(cls):
    '''
    单例
    :param cls:
    :return:
    '''
    _instance = {}

    def _singleton(*args, **kargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kargs)
            # print(type(_instance[cls])) <class '__main__.Coco'>
        return _instance[cls]

    return _singleton


@singleton
class Coco():

    # def __new__(cls, *args, **kwargs):
    #     if not hasattr(Coco, "_instance"):
    #         if not hasattr(Coco, "_instance"):
    #             Coco._instance = object.__new__(cls)
    #             print(type(Coco._instance))
    #     return Coco._instance

    def __init__(self):
        print('coco')

    @classmethod
    def get_info(cls):
        print('coco is 18 ages old')

# print(Coco().get_info())
print(Coco.get_info())

异常

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "/Users/coco/Automation/AutoTestRes/scripts/python/coco.py", line 36, in <module>
    print(Coco.get_info())
AttributeError: 'function' object has no attribute 'get_info'
EN

回答 1

Stack Overflow用户

发布于 2022-04-11 09:03:41

在Python中使用装饰器时,如下所示:

代码语言:javascript
运行
复制
@decorator_name
class class_name:
    ...

.这相当于这样做:

代码语言:javascript
运行
复制
class class_name:
    ...
class_name = decorator_name(class_name)

这意味着变量class_name的值不再一定是类,而是decorator_name的返回值。

在您的示例中,类装饰器singleton返回函数 _singleton,而不是实际的类。所以当你说:

代码语言:javascript
运行
复制
print(Coco.get_info())

.这等于说:

代码语言:javascript
运行
复制
print(_singleton.get_info())

...within函数。

因此,您将得到一个AttributeError,因为现在名称为Coco的函数没有该属性。

要访问类的属性,需要运行函数,因为这将返回类的一个实例,该实例将具有该属性。

不再可能从全局范围访问类本身。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71824973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档