在Python中的自定义类中实现“with object() as f”的使用

2024-04-30

我必须在 python 中打开一个类似文件的对象(它是通过 /dev/ 的串行连接),然后关闭它。在我的班级的几种方法中,这已经完成了好几次。我的做法是在构造函数中打开文件,然后在析构函数中关闭它。不过,我遇到了奇怪的错误,我认为这与垃圾收集器有关,因此,我仍然不习惯不准确地知道我的对象何时被删除=\

我这样做的原因是因为我必须使用tcsetattr每次我打开它时都会有一堆参数,到处做这些事情很烦人。所以我想实现一个内部类来处理所有这些,这样我就可以用它来做
with Meter('/dev/ttyS2') as m:

我在网上查找,但找不到关于如何解决问题的真正好的答案with语法已实现。我看到它使用__enter__(self) and __exit(self)__方法。但是我所要做的就是实现这些方法并且我可以使用 with 语法吗?或者还有更多的事情吗?

是否有关于如何执行此操作的示例或一些关于如何在文件对象上实现它的文档可供我查看?


这些方法几乎是让对象工作所需的全部with陈述。

In __enter__您必须在打开文件对象并设置它后返回它。

In __exit__你必须关闭文件对象。写入它的代码将位于with声明体。

MODE = 'rb'
class Meter():
    def __init__(self, dev):
        self.dev = dev
    def __enter__(self):
        #ttysetattr etc goes here before opening and returning the file object
        self.fd = open(self.dev, MODE)
        return self
    def __exit__(self, exception_type, exception_value, exception_traceback):
        #Exception handling here
        self.fd.close()

meter = Meter('/dev/tty0')
with meter as m:
    #here you work with the file object.
    m.fd.read()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中的自定义类中实现“with object() as f”的使用 的相关文章

随机推荐

  • 公钥的长度(加密)可以与私钥不同吗?

    我有一个 1024 位的私钥 并用它来生成公钥 这是否自动意味着我的公钥也具有 1024 加密 或者它的加密大小可以更小吗 512 256 PS 我最感兴趣并谈论的是 RSA 密钥中模数 n 的大小 大小通常为 1024 或 2048 位
  • 启用 WCF 数据服务默认接受/返回 JSON

    我有一个 WCF 数据服务 我希望默认情况下为所有操作返回 JSON 我可以在配置 通过服务属性中设置它吗 为了通过 format 标签启用 json 如下所示 host 8038 YourService svc format json 将
  • 您会在新的商业项目中使用 S#arp 架构吗?

    The S arp 架构 http code google com p sharp architecture 看起来真的很酷 但是您是否认为它仍然太新而无法在重要的新项目中做出承诺 我们假设该项目乍一看很适合它 It all seems非常
  • 无法在 XAMPP 和 Windows XP 上安装 Xdebug

    我知道 这个问题已经被问过好几次了 但答案并没有解决我的问题 我在 Windows XP SP3 上运行 XAMPP 1 8 2 并且在安装 XDebug 时遇到困难 我从网站下载了XDebug 不幸的是 安装向导对我不起作用 我的 PHP
  • 如何在 CSV 文件中插入新行?

    我正在创建一个系统 其中涉及创建用于错误记录的 CSV 我当前的代码成功创建了一个具有唯一名称的新文件 然后将现有数据 来自数组 添加到 CSV 中 我遇到的问题是在文件中添加新行 这是维持正确结构所必需的 我现有的代码 current f
  • rvm 监控延迟作业

    我正在尝试使用 monit 运行delayed job 但它无法运行 因为 rvm 的路径 每个用户的本地 rvm 安装 对该命令不可用 我的应用程序是一个带有捆绑器的rails2应用程序 Monit 无法找到捆绑程序 有人对我如何了解 m
  • 致命错误:未找到“MongoDB\Driver\Manager”类

    我想使用 MongoDB 驱动程序 但当我使用它时 它抛出一个错误 mongo new MongoDB Driver Manager mongodb localhost 27017 错误 消息 未找到类 MongoDB Driver Man
  • 合并 Pandas Dataframe:如何添加列和替换值

    我有一个数据帧 df1 并想要合并其他 许多 数据帧 df2 以便 合并发生在匹配的 多 索引上 如果缺失 将创建新列 如果列已存在 则替换值 正确的 pandas 操作是什么以及使用什么参数 我查看了 concat join merge
  • 解析 JSONException:JSONArray 文本必须以字符 1 处的 '[' 开头

    我正在尝试将 Android 应用程序与本地 MySQL 数据库连接 但遇到问题 解析 JSON 数组 我在这里阅读了所有类似的问题 但没有任何作用 错误消息 Error parsing data org json JSONExceptio
  • 使用 Sheets API v4 获取与 Google 帐户关联的所有电子表格的列表

    使用 Google Sheets API v4 我希望获取附加到我的帐户的电子表格列表 我做了很多研究 但还没有找到任何解决方案 v4 API 不提供列出电子表格的方法 您需要使用 Drive API 这从以前的 API 页面迁移 http
  • Mongodb 获取聚合框架中的最后组合

    有一个消息集合 date NumberLong 1421134514 sender 53172480f9cd0e682840b9f7 recipient 52f37fbaf9cd0e02773c97b1 isRead false id 54
  • Office 365 默认日历的 ID 自动更改

    我使用 Office 365 API 的 V2 DLL 来执行日历操作 我正在保存默认日历的 ID 以对其执行操作 从过去两年开始 它对我来说工作得很好 但最近自从上 1 个月以来 当我尝试从我的帐户中获取日历时 只是为了检查日历是否适用于
  • 如何使用正则表达式提取字符串进行词性标记

    参考question https stackoverflow com questions 44434739 how to extract a string before and after slash in r 我在以下示例的解决方案中面临
  • 如何在 C 中的 for (;;) 循环中声明多个变量?

    我认为可以在一个变量中声明多个变量for loop for int i 0 char ptr bam i lt 10 i 但我刚刚发现这是不可能的 GCC 给出以下错误 错误 char 之前应有不合格的 id 你真的不能在一个变量中声明不同
  • 如何编写允许特殊字符 DOT 的正则表达式?

    如何编写允许用户名中包含字符 DOT 的正则表达式 例如 R Robert X A Pauline 用反斜杠转义点
  • PHP - 根据一个值查找具有不同结构的两个多维数组之间的差异

    我正在努力理解哪种数组函数最适合我的特定情况 其他人似乎有很多困惑 我也读过几篇文章 我有两个具有不同结构的数组 但都包含一个我想比较的 ID 字段 数组一是我的素材数组 它看起来像 array 1 0 gt array 5 ID gt s
  • 了解编译器如何在初始化中使用普通的 {}-list

    考虑以下玩具代码 class Y public Y int int cout lt lt Y ctor n class X public X initializer list
  • Android:保存新图像后刷新图库

    因此 在我的应用程序中 我有时将一堆图像保存到临时文件夹中 我希望它们立即显示在图库中 重新启动后 他们会这样做 但否则他们不会 我尝试过使用 sendBroadcast 方法 sendBroadcast new Intent Intent
  • MainActivity类型的层次结构不一致

    我通过 eclipse 创建了一个新的 Android 项目 其中包含 MainActivity 我将 ActionBarSherlock 添加到项目中 属性 gt Android 然后单击 添加 然后 当我用 extends Sherlo
  • 在Python中的自定义类中实现“with object() as f”的使用

    我必须在 python 中打开一个类似文件的对象 它是通过 dev 的串行连接 然后关闭它 在我的班级的几种方法中 这已经完成了好几次 我的做法是在构造函数中打开文件 然后在析构函数中关闭它 不过 我遇到了奇怪的错误 我认为这与垃圾收集器有