gpt4 book ai didi

python - 访问装饰类

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:16 24 4
gpt4 key购买 nike

我继承了一个项目。我不太擅长装饰器,但我正在学习!

我有 2 个类(class),都经过装饰。它们在不同的文件中。我想在 class1 的方法中调用 class2 的类方法。像这样:

@class_decorator
class Class2(object):

@classmethod
def generator(cls):
for s in my_stuff:
yield s

@class_decorator
class Class1(object):

def __init__(self):
self.my_list = [1,2,3]

def some_funct(self):
for a,b in zip(self.my_list, Class2.generator()):
print "{} {}".format(a,b)

我得到一个 AttributeError,NoneType 没有属性生成器

这是因为Class2被装饰了吗?我不能在 Class2 上调用类方法吗?

最佳答案

@class_decorator
class Class2(object):

(技术警告除外)完全等同于

class Class2(object):
...
Class2 = class_decorator(Class2)

(技术上的警告是,如果 Class2 修改了 class_decorator,那么这两个可能会有所不同。)


错误信息

AttributeError, NoneType has no attribute generator

表明当 Python 到达 Class2.generator() 时,Class2None,因此 Python 无法找到其 generator 属性。

现在您可能想知道,Class2 怎么会是 None?如果 class_decorator 返回 None,就会发生这种情况,因为这会导致 Class2 变得等于 None:

Class2 = class_decorator(Class2)

所以检查 class_decorator 返回一个类:

def class_decorator(cls):
# modify cls
return cls # The error could be due to this line being missing

关于python - 访问装饰类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19811445/

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