gpt4 book ai didi

python - 从装饰类访问静态字段

转载 作者:太空狗 更新时间:2023-10-30 00:05:00 27 4
gpt4 key购买 nike

完整代码示例:

def decorator(class_):
class Wrapper:
def __init__(self, *args, **kwargs):
self.instance = class_(*args, **kwargs)

@classmethod
def __getattr__(cls, attr):
return getattr(class_, attr)
return Wrapper


@decorator
class ClassTest:

static_var = "some value"


class TestSomething:

def test_decorator(self):
print(ClassTest.static_var)
assert True

当尝试执行测试时,出现错误:

test/test_Framework.py F
test/test_Framework.py:37 (TestSomething.test_decorator)
self = <test_Framework.TestSomething object at 0x10ce3ceb8>

def test_decorator(self):
> print(ClassTest.static_var)
E AttributeError: type object 'Wrapper' has no attribute 'static_var'

是否可以从装饰类访问静态字段?

最佳答案

虽然@martineau 的答案可能更好地解决了您要解决的具体问题,但更通用的方法可能是使用创建元类来重新定义实例 方法__getattr__ type 实例上(类是 type 的实例)。

def decorator(class_):
class WrapperMeta(type):
def __getattr__(self, attr):
return getattr(class_, attr)

class Wrapper(metaclass=WrapperMeta):
def __init__(self, *args, **kwargs):
self.instance = class_(*args, **kwargs)

return Wrapper

这允许类本身的属性查找通过 WrapperMeta.__getattr__ 传递。

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

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