Python 在重写_unew_uu返回初始化对象时如何使用上下文
我已经实现了一个工厂类,它在Python 在重写_unew_uu返回初始化对象时如何使用上下文,python,Python,我已经实现了一个工厂类,它在\uuuu new\uuuu方法中返回一个初始化的类 class MyFactory(object): def __new__(self, my_obj, *args, **kwargs): if my_obj == ...: return A(*args, **kwargs) else: return B(*args, **kwargs) 两个类A和B都扩展了一个支持上下文的基
\uuuu new\uuuu
方法中返回一个初始化的类
class MyFactory(object):
def __new__(self, my_obj, *args, **kwargs):
if my_obj == ...:
return A(*args, **kwargs)
else:
return B(*args, **kwargs)
两个类A
和B
都扩展了一个支持上下文的基类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希望MyFactory
类上存在\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
我应该做哪些更改才能实现上述用途
编辑:
我承认,这实际上是正确的做法。我的错误是由于在\uuuuu enter\uuuu
方法中没有返回self
:facepalm:
目前MyFactory只扩展了项目
class MyFactory(object):
我认为MyFactory对象需要使用以下语法扩展MyBase:
class MyFactory(MyBase):
...
这将启用\uuuu exit\uuuu
和\uuuu enter\uuuu
方法的超类实例化,而无需在子类中再次明确描述它们
这有点像mashup,但由于您从\uuuuu new\uuuuuu
调用返回对象,因此这可能是一个公平的选择 如果。\uuuu new\uuuu()
方法返回的内容不是包含类的实例,则该类在返回对象的功能中不再起作用。换句话说,MyBase
即使是一个类也没有意义,因为它从来都不是一个类——它也可能是一个普通函数。我相信您误解了抛出错误的原因,但由于您没有实际包含错误回溯,我不能确定。它应该会起作用。首先尝试将结果对象指定给变量,然后在with块中使用它,查看是否也会导致错误