当前位置: 首页 > 面试题库 >

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

谷梁宁
2023-03-14
问题内容

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

即这是可以的:

with X() as x:
 ...

这不是:

x = X()

如何确保此类功能?


问题答案:

到目前为止,所有答案都没有提供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()使用情况管理器时。



 类似资料:
  • 问题内容: 如何检查句子在Python中是否有效? 例子: 问题答案: 查看NLTK。他们支持语法,您可以使用语法来分析句子。您可以定义语法,也可以使用提供的语法以及无上下文的解析器。如果句子解析,那么它具有有效的语法;如果没有,那就没有。这些语法可能没有最广泛的覆盖范围(例如,它可能不知道如何处理StackOverflow之类的单词),但是这种方法可以让您明确说明语法中有效或无效的内容。 NLT

  • 问题内容: 这是我的尝试: 问题答案: 我发布后马上想通了:

  • 问题内容: 在JavaScript中,声明在全局对象上创建属性: ES6引入了具有作用域范围的声明的词法作用域。 但是,这些声明是否在全局对象上创建属性? 问题答案: 语句是否在全局对象上创建属性? 根据规范,否: 全局环境记录在逻辑上是单个记录,但是它被指定为封装对象环境记录和声明性环境记录的复合记录。该对象环境记录作为其基本对象相关的全局对象境界。该全局对象是全局环境记录的GetThisBin

  • 问题内容: 我正在使用SQL Server,但没有足够的数据集来测试查询的性能。 我想分析查询,看看索引是否被利用。我该如何检查 问题答案: 在SQL Management Studio中,只需键入查询,然后按Control-L(显示查询执行计划)。在那里,您将能够查看是否正在使用任何索引。“表扫描”表示未使用索引。“索引扫描”是指使用索引。

  • 问题内容: 我是编程和处理函数的新手,如果一个句子中存在一个单词,该函数将返回true。我尝试了该方法,但是后来我也遇到了这种方法的一个问题: 假设我的句子是 如果我们看一下这个词用的方法,那么它将返回因为存在而应该是正确的输出为不存在的词,但作为一种模式。 我该如何解决此问题?到目前为止,我正在使用的代码是: 注意: 这个词只是一个例子,显示了我目前的方法中的一个问题,并不是我必须一直工作,这个

  • 问题内容: 我有一个需要循环通过的嵌套JSON对象,每个键的值可以是String,JSON数组或另一个JSON对象。根据对象的类型,我需要执行不同的操作。有什么方法可以检查对象的类型以查看它是String,JSON对象还是JSON数组? 我尝试使用和,但似乎都没有用,因为这将为JSON对象和数组都返回一个对象,并且在我这样做时给出错误。 更具体地说,在将JSON解析为JS对象之后,有什么方法可以检

  • 问题内容: 我的服务器端代码返回一个值,该值成功时为json对象,失败时为字符串’false’。现在如何检查返回的值是否为json对象? 问题答案: 如果字符串是JSON,则jQuery.parseJSON()应该返回类型为“对象”的对象,因此您只需使用以下命令检查类型

  • 我有一个需要循环的嵌套JSON对象,每个键的值可以是字符串、JSON数组或其他JSON对象。根据对象的类型,我需要执行不同的操作。是否有任何方法可以检查对象的类型,以查看它是字符串、JSON对象还是JSON数组? 我尝试使用和,但两者似乎都不起作用,因为将为JSON对象和数组返回一个对象,并且当我执行时,会给出一个错误。 更具体地说,在将JSON解析为JS对象后,是否有任何方法可以检查它是普通字符