如何检查是否使用`with`语句创建对象?

vpas

我想确保仅在“ with”语句中实例化该类。

即这是可以的:

with X() as x:
 ...

这不是:

x = X()

如何确保此类功能?

laike9m

到目前为止,所有答案都没有提供OP直接想要的(我认为)
(我认为)OP希望这样:

>>> with X() as x:
 ...  # ok

>>> x = X()  # ERROR

Traceback (most recent call last):
  File "run.py", line 18, in <module>
    x = X()
  File "run.py", line 9, in __init__
    raise Exception("Should only be used with `with`")
Exception: Should only be used with `with`

这是我想出的,可能不是很可靠,但我认为它最接近OP的意图。

import inspect
import linecache

class X():

    def __init__(self):
        if not linecache.getline(__file__,
            inspect.getlineno(inspect.currentframe().f_back)
        ).startswith("with "):
            raise Exception("Should only be used with `with`")

    def __enter__(self):
        return self

    def __exit__(self, *exc_info):
        pass

这将给完全相同的输出如我上面显示,只要with是与同一线路X()使用情况管理器时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

避免使用If语句检查对象是否为Null

如何使用if语句检查连接错误是否发生

如何检查使用@SessionAttributes创建的会话是否存在(Spring MVC)

如何使用Jquery检查Json对象是否存在?

使用“内联”新语句创建的对象是否自动处置?

如何检查对象是否已经创建?

如何使用while循环在Java中创建搜索语句,并在找到对象后停止并返回对象

如何检查距模型对象创建时间是否超过10分钟?

如何检查使用alamofire创建的类模型是否为零?

如何使用动态选择中的表达式创建“内联if语句”以进行null检查

使用with语句创建stem.control.Controller对象是否有意义?

使用If语句检查是否引发错误

如何使用case语句检查column是否为null

如何检查if语句是否元素返回true

如何检查'if'语句中是否存在变量?

创建是否应使用if语句的if语句?

如何控制是否不应该使用Javascript创建对象

在将对象添加到列表之前,如何使用LINQ语句检查现有列表中的任何对象是否已存在变量?

如何使用python语句检查sql表是否存在?

如何检查if语句中是否设置了List <T>中的至少一个对象特定属性

如何返回/实现 ArrayList 的 toString?另外,只是想检查我是否正确创建了我的对象?

在 if 语句中创建对象并稍后使用

检查 Case 查询集语句中是否存在相关对象?

如何使用if else语句在javascript对象中创建密钥

如何使用java检查是否正确创建了Oracle程序?

如何使用if或语句检查两个变量是否相同

c# - 如何创建if语句来检查按钮文本是否已更改为特定值

如何使用 *ngif 检查 ReportControl 对象上是否存在 Reportid?

如何使用 Streams 检查对象是否存在 List