gpt4 book ai didi

python - 覆盖 __new__ 以返回初始化对象时如何使用上下文

转载 作者:行者123 更新时间:2023-12-04 15:25:50 25 4
gpt4 key购买 nike

我已经实现了一个工厂类,它在 __new__ 方法中返回一个初始化的类

class MyFactory(object):
def __new__(self, my_obj, *args, **kwargs):
if my_obj == ...:
return A(*args, **kwargs)
else:
return B(*args, **kwargs)

AB 类都扩展了一个支持上下文的基类MyBase()

class MyBase(object):
def __enter__(self):
...

def __exit__(self, exc_type, exc_val, exc_tb):
...

我正在尝试像这样使用这个设置

with MyFactory(my_obj, ...) as something:
something.do_something()

但是显然会抛出错误,因为 python 期望 __enter____exit__ 对出现在 MyFactory 类上

我应该做哪些更改才能使上述用法成为可能?

编辑:

我承认,这实际上是正确的做法。我的错误是由于未在 __enter__ 方法中返回 self :facepalm:

Heres the working code for those of you interested

最佳答案

目前 MyFactory 仅扩展 oject

class MyFactory(object):

我认为您的 MyFactory 对象需要使用以下语法扩展 MyBase:

class MyFactory(MyBase):
...

这应该启用 __exit____enter__ 方法的父类(super class)实例化,而无需在子类中再次明确描述它们。

它有点混搭,但由于您要从 __new__ 调用返回对象,所以它可能是一个公平的组合。

关于python - 覆盖 __new__ 以返回初始化对象时如何使用上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62266530/

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