【问题标题】:How to check if class is initialized using the with statement?如何使用 with 语句检查类是否已初始化?
【发布时间】:2015-11-12 22:47:11
【问题描述】:

我正在使用此答案中的类示例来确保始终清理某些文件:https://stackoverflow.com/a/865272/651779

我想要的是当我打电话时

pacakge_object = PackageResource()

而不是

with PackageResource() as package_obj:
    # do stuff

它给出了一个错误,解释这个类只能与with 语句一起使用。有没有办法知道类是否用with PackageResource() as package_obj: 而不是pacakge_object = PackageResource() 初始化?

【问题讨论】:

  • 我不认为有,但你为什么要阻止任何人使用package_object = PackageResource()?只需在文档中说明如何使用它。如果有人选择以不同的方式使用它,他们要么知道自己在做什么,要么是他们的问题,而不是你的问题。
  • 班级不知道要分配给什么或如何分配,除非您使用inspect 做一些可怕而脆弱的事情;只需记录它最适合用作上下文管理器,并保留嘲笑无视您、崩溃和燃烧的人的权利!
  • 您可以查看this article,特别是在将上下文管理器实现为类部分。您可能会在那里找到有用的东西。
  • @Christian 只是告诉您如何制作 CM,OP 已经完成了,而不是如何强制用户以这种方式使用该类。
  • @jonrsharpe 那么,在那个链接中没有任何 OP 可以使用?

标签: python-2.7 with-statement


【解决方案1】:

在你的__enter__函数中设置一个标志,如果你的类的任何属性/方法在没有设置该标志的情况下被调用,那么有人在欺骗你。

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多