Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何使用name属性实例化io.TextIOWrapper对象?

如何使用name属性实例化io.TextIOWrapper对象?
EN

Stack Overflow用户
提问于 2020-03-10 17:24:43
回答 1查看 1.1K关注 0票数 3
代码语言:javascript
代码运行次数:0
复制
import sys

print(sys.stdin)
print(type(sys.stdin))
print(sys.stdin.name)
print(sys.stdin.__dict__)

执行上述命令时,输出如下:

代码语言:javascript
代码运行次数:0
复制
<_io.TextIOWrapper name='<stdin>' mode='r' encoding='UTF-8'>
<class '_io.TextIOWrapper'>
<stdin>
{'mode': 'r'}

因此,从上面的代码片段和输出中,我可以看到name是表示sys.stdin_io.TextIOWrapper实例的属性。在io.TextIOWrapper的文档中(例如通过$ pydoc io.TextIOWrapper ),它确实将name列为数据描述符。然而,无论出于什么原因,name都不会在其__dict__中显示为一个项目。

当我使用以下命令手动创建io.TextIOWrapper实例时:

代码语言:javascript
代码运行次数:0
复制
import io

a = io.TextIOWrapper(io.BytesIO())
print(a)
a.name

<_io.TextIOWrapper encoding='UTF-8'>已打印出来。但是a.name行抛出了错误:AttributeError: '_io.BytesIO' object has no attribute 'name';我期望的AttributeError,但我没想到会说它是一个_io.BytesIO对象。

然后,我尝试手动创建一个子类并附加一个name属性,如下所示:

代码语言:javascript
代码运行次数:0
复制
import io


class NamedTextIOWrapper(io.TextIOWrapper):

    def __init__(self, buffer, name=None, **kwargs):
        self.name = name
        io.TextIOWrapper.__init__(self, buffer, **kwargs)


input = io.BytesIO('abc')
stdin = NamedTextIOWrapper(input, name='<stdin>', encoding='utf-8')

print(stdin.name)

然而,这会遇到:AttributeError: attribute 'name' of '_io.TextIOWrapper' objects is not writable

理想情况下,我还希望能够在手动实例化的io.TextIOWrapper对象中的sys.stdin实例中维护看似可用的mode属性。对于sys.stdout等效项,我假设它们是相同的,只是name应该设置为'<stdout>'mode应该设置为'w'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-10 18:30:35

您可以使用在请求name属性时返回对象属性字典的name键的方法来覆盖__getattribute__方法:

代码语言:javascript
代码运行次数:0
复制
class NamedTextIOWrapper(io.TextIOWrapper):
    def __init__(self, buffer, name=None, **kwargs):
        vars(self)['name'] = name
        super().__init__(buffer, **kwargs)

    def __getattribute__(self, name):
        if name == 'name':
            return vars(self)['name']
        return super().__getattribute__(name)

因此:

代码语言:javascript
代码运行次数:0
复制
input = io.BytesIO(b'abc')
stdin = NamedTextIOWrapper(input, name='<stdin>', encoding='utf-8')
print(stdin.name)

输出:

代码语言:javascript
代码运行次数:0
复制
<stdin>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60622854

复制
相关文章
如何使用 ref 属性获取子组件实例对象?
在 Vue 中,我们可以使用 ref 属性来获取子组件的实例对象。这个功能非常方便,可以让父组件直接访问子组件的方法和数据。本文将详细介绍如何使用 ref 属性获取子组件实例对象。
网络技术联盟站
2023/06/04
2.9K0
对象如何实例化
平时开发时通过new来构建对象的实例。通过引用变量指向被创建的对象,并使用此引用变量操作对象,在实例化对象的过程中JVM到底发生了一些什么样的行为变化呢,这个问题在日常进行功能开发时可能并没有怎么去关注,本小节来对这部分知识点来进行学习,同时也加强一下对于jvm的认识
在水一方
2022/06/14
1.2K0
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
https://www.cnblogs.com/poloyy/p/15178423.html
小菠萝测试笔记
2022/03/23
1.4K0
Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性
python 面向对象基础 实例属性和类属性
但是,如果Student类本身需要绑定一个属性呢?可以直接在class中定义属性,这种属性是类属性,归Student类所有:
葫芦
2019/04/17
5140
Python 类对象和实例对象访问属性的区别、property属性
下面的一个小demo,定义了一个省份类  Province ,即类对象 Province ,开辟了一块内存空间,空间中存放着 类属性 country 和 __init__()方法 。
用户7886150
2020/12/20
3.7K0
【说站】python类如何实例化对象
1、把类看作是定制的数据类型。既然是类型,只能用来表示数据的类型,不能直接用来保存数据。要保存数据,首先需要创建一个类似于这类容器的东西,称为对象(或例子)。通过类别产生对象的过程称为例子。
很酷的站长
2022/11/23
1.4K0
【说站】python类如何实例化对象
iOS对象实例化
如果用的storybord中的tableview的cell直接用dequeueReusableCellWithIdentifier方法就行了 注意dequeueReusableCellWithIdentifier方法是从已经实例化的cell中查找id为textLeftCell的对象并进行拷贝
码客说
2019/10/22
1.6K0
理解Python中的类对象、实例对象、属性、方法
class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.name = 'haha' # 公有实例属性 self.__sex = 'man' # 私有实例属性 def smile(self): # 公有方法 self指向实例对象 pass def __jump(
汪凡
2018/05/29
3.9K0
如何直接访问php实例对象中的private属性详解
前言 本文主要介绍了关于如何直接访问php实例对象中private属性的相关内容,在介绍关键部分之前,我们先回顾一下php面向对象的访问控制。 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。
用户2323866
2021/07/09
3.3K0
JVM实战 - 对象实例化
Java是面向对象的静态强类型语言,声明并创建对象的代码很常见,根据某个类声明一个引用变量指向被创建的对象,并使用此引用变量操作该对象 在实例化对象的过程中,JVM中发生了什么化学反应呢? (1)下
JavaEdge
2019/02/15
1.2K0
JVM实战 - 对象实例化
Python对象的实例化
# python对象的实例化 # 代码 ''' __init__ 方法会在类的对象被实例化(Instantiated)时立即运行。这一方法可以对任何你想 进行操作的目标对象进行初始化(Initialization)操作。 ''' class Person: def __init__(self, name): self.name = name def say_hi(self): print('Hello,my name is', self.name) p
benym
2022/07/14
8870
【说站】python__name__ 属性的使用注意
1、__name__ 属性可以做到,测试模块的代码 只在测试情况下被运行,而在被导入时不会被执行。
很酷的站长
2022/11/23
2860
如何删除对象的某个属性(对象属性方法是什么)
const object = { ‘a’: 1, ‘b’: ‘2’, ‘c’: 3 };
全栈程序员站长
2022/07/29
4.5K0
html锚点id属性和name属性
刚接触HTML的时候就知道描点,所以对描点这两个字特别熟悉,但一直没用过😂。最近对模板更新时用到了这一点,举例说一下
Dabenshi
2023/08/24
3860
Java 静态属性与实例属性的初始化
类的初始化包括静态属性的初始化和实例属性的初始化,在加载类过程中的准备阶段会给静态属性分配存储空间,并根据属性的类型设置初始值,例如 int 类型静态属性会设置初始值为 0,布尔类型静态属性会设置初始值为 false;实例属性的初始化会在构造实例对象时发生。
zhipingChen
2019/05/08
2.4K0
对象实例化空指针处理
首先创建一个package包,将其Menu类及相关代码放入其中,并在该package包下创建另一个类MenuItem,然后通过构造函数,写入需要运行的对象信息,最后在Menu类中用new***()格式重新将对象实例化。相关代码及结果如下:
算法与编程之美
2023/08/22
1540
对象实例化空指针处理
Python笔记(七):字典、类、属性、对象实例、继承
(一)  简单说明    字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据)。例如:下面这个就是一个字典 {'姓名': '张三', '出生日期': '2899-08-12', '成绩': ['3.21', '3.10', '3.01']} 创建字典、添加数据、访问字典数据的方式如下: d = {}  #直接用{}创建字典 f = dict() #通过工厂函数dict()创建字典 #通过下面的方式添加数据 d['姓名'] = '张三' d['出生日期'] =
free赖权华
2018/04/27
1.2K0
Python笔记(七):字典、类、属性、对象实例、继承
如何遍历JavaScript中对象属性
在2016年6月发布的ECMAScript 2016的同一时期,令JavaScript开发人员开心的是知道另一组很棒的提案已经达到了第4阶段(完成)。
疯狂的技术宅
2019/03/27
3.6K0
如何遍历JavaScript中对象属性
animation-name 属性——动画示例
用途 animation-name 规定 @keyframes 动画的名称 语法 animation-name: none; animation-name: identifier; 值 值 描述 none 特殊关键字,表示无关键帧。 identifier 动画名称。名称必须符合CSS语法中标识的定义。 例子 /* HTML */ <div class="stage"> <figure class="ball"></figure> </div> /* CSS */ @keyfra
Html5知典
2019/11/26
3840
如何使用 JS 动态合并两个对象的属性
我们可以使用扩展操作符(...)将不同的对象合并为一个对象,这也是合并两个或多个对象最常见的操作。
前端小智@大迁世界
2022/06/15
6.7K0

相似问题

如何使用属性实例化模型对象?

30

Python: AttributeError:'_io.TextIOWrapper‘对象没有’_io.TextIOWrapper‘属性

32

属性错误'_io.TextIOWrapper‘对象没有属性'open’

28

AttributeError:'_io.TextIOWrapper‘对象没有属性’追加‘

10

Python:在A类实例化中实例化类B,<类A name>对象没有属性<类B attribute>

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文