gpt4 book ai didi

python - 解决嵌套属性中的属性错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:03:30 27 4
gpt4 key购买 nike

我正在编写一个小型模拟类来进行一些测试。

但是这个类需要支持嵌套属性的想法。

这个例子应该提供对问题的一些见解:

class Foo(object):

def __init__(self):
self.x = True

从上面的类,我们可以有:

f = Foo()
f.x

我知道我可以添加返回到 __getattr__ 的属性以避免 AttributeError,但是如果我需要这样的东西才能有效怎么办:

f = Foo()
f.x
f.x.y
f.x.y.z()

如果对象被调用为 f.x.y.z(),我知道返回什么,但我只需要找到一种方法来到达 z() 是有意义的。

最佳答案

您可以通过在每个属性访问时返回“模拟任何东西”类的另一个实例来“模拟任何东西”(如果您想拥有 .z(),它也必须是可调用的)部分工作;-).

例如:

class MockAny(object):

# mock special methods by making them noops
def __init__(self, *a, **k): pass

# or returning fixed values
def __len__(self): return 0

# mock attributes:
def getattr(self, name):
return MockAny()

# make it callable, if you need to
def __call__(self, *a, **k):
return MockAny()

当然,另一种方法是知道您在模拟什么(通过内省(introspection),或通过某种形式的“声明性描述”,或简单地通过对特定事物进行模拟编码; -) 而不是采取包罗万象的方法;但是,后者也是可行的,正如您在上面(部分)示例中看到的那样。

就我个人而言,我建议使用现有的模拟框架,例如 pymox而不是重新发明这个特定的轮子(此外,此类框架的源代码可能比对 SO 的合理简洁响应更具指导意义,就像这个;-)。

关于python - 解决嵌套属性中的属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376566/

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