首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python类型对象的默认__repr__是如何实现的?

在Python中,当你尝试打印一个对象或者使用repr()函数时,会调用该对象的__repr__()方法

Python中所有的内置类型对象的__repr__()方法都是通过调用其对应的C语言层面的函数来实现的。这些函数通常位于Python解释器的内部实现中,而不是在Python源代码中。

例如,对于整数类型int,其__repr__()方法的实现位于Python解释器的C语言源代码中,对应的函数是int_repr()。当你在Python代码中调用repr(42)时,实际上会调用这个C语言函数。

这里有一个简化的例子,展示了如何为一个自定义类实现__repr__()方法:

代码语言:javascript
复制
class MyClass:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return f'MyClass(value={self.value})'

obj = MyClass(42)
print(repr(obj))  # 输出: MyClass(value=42)

然而,对于内置类型,如intstrlist等,它们的__repr__()方法是由Python解释器内部实现的,而不是通过这种方式定义的。

总之,Python类型对象的默认__repr__()方法是通过调用其对应的C语言层面的函数来实现的。这些函数位于Python解释器的内部实现中,而不是在Python源代码中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python 魔术方法(三)对象打印 -- __repr__ 与 __str__

引言 上一篇文章中,我们介绍了 Python 对象创建和初始化两个方法。...python 魔术方法(二) 对象创建与单例模式实现 但有另外两个常用魔术方法也一样困扰着很多 Python 程序员,那就是本文将介绍用于对象字符串化两个方法 — __repr__ 和 __str...__repr__] 事实上,上面的例子已经展现了两个方法设计原则上不同: %r 设计用来展示对象细节,此时调用 __repr__ 方法 %s 用来为用户展示友好可读信息,这与 str 方法以及...默认行为 3.1. 默认实现 如果我们没有实现两个方法任何一个,会打印出什么呢?...结论 我们看到,默认方式通常并不是我们想要,而如果我们只实现了 __repr__,那么所有需要使用 __str__ 场景都会去调用 __repr__ 因此,实践中建议,为每个类都实现 __repr

40820

小心此坑:Python 函数参数默认可变对象

看到了有给 Python 函数参数默认值传递可变对象,以此来加快斐波那契函数递归速度,代码如下: def fib(n, cache={0: 0, 1: 1}): if n not in cache...,Python 函数也是对象,参数默认值就是对象属性,在编译阶段参数默认值就已经绑定到该函数,如果可变对象Python 函数参数默认值在会被存储,并被所有的调用者共享,也就是说,一个函数参数默认值如果一个可变对象...id 一样,说明它们用到 li 同一个,这就参数默认可变对象逻辑,对于所有的调用者来讲,共享。...如果要深入研究 Python 为什么这么设计,可以移步 http://cenalulu.github.io/python/default-mutable-arguments/ 如何避免?...最好方式不要使用可变对象作为函数默认值。

1K10

Java类如何默认继承Object

前言 学过Java的人都知道,Object所有类父类。但是你有没有这样疑问,我并没有写extends Object,它是怎么默认继承Object呢?...那么今天我们就来看看像Java这种依赖于虚拟机编程语言怎样实现默认继承Object,以及Java编译器和JVM到底如何?...因此,Object超类,所有类父类。 推测可能原因 要了解Java类如何默认继承Object原因其实并不需要知道JVM实现细节。只需了解一下对于这种虚拟机程序基本原理即可。...验证结论 从上面两种情况可以看出,第1种情况在编译器上做文章,也就是说,当没有父类时,由编译器在编译时自动为其指定一个父类。第2种情况在虚拟机上做文章,也就是这个默认父类由虚拟机来添加。...那么Java属于哪一种情况呢?其实这个答案很好得出。只需要随便找一个反编译工具,将.class文件进行反编译即可得知编译器如何编译

1.8K30

对象内存如何布局

上文 :HotSpot虚拟机对象如何被创建? ---- ? ? 对象内存如何布局?...注:64位虚拟机上面有一个压缩指针选项-XX:+UseCompressedOops,默认开启Pointer部分就会压缩为4字节,此时对象头大小就会缩小到12字节。...类型指针:虚拟机通过这个指针来查找对象是哪个类实例。 实例数据(Instance Data) 实例数据部分对象真正存储有效信息,即程序代码中所定义各种类型字段内容,包含子父类所有字段信息。...注意:任何对象大小都必须8字节整数倍 ? 对象访问定位 java程序通过栈上reference数据来操作堆上具体对象。 reference又是什么? 对象句柄地址。 访问方式有哪些?...直接指针:java堆对象布局中就必须考虑如何放置访问类型数据相关信息,而reference中存储直接就是对象地址。 优式:速度更快。 注意:HotSpot用直接指针访问方式。

93410

源码剖析类型断言如何实现!附性能损耗测试

前言 ★哈喽,everyBody,我asong,今天我们一起来探索一下interface类型断言如何实现。...(string) fmt.Printf("value: %v", str) } 上面我们声明了一个接口对象demo,通过类型断言方式断言一个接口对象demo是不是nil,并判断接口对象demo存储类型...(T),这个表达式也是可以断言一个接口对象(i)里不是nil,并且接口对象(i)存储类型 T,如果断言成功,就会返回其类型给t,并且此时 ok 值 为true,表示断言成功。...最后总结一下空接口类型断言实现流程:空接口类型断言实质将eface中_type与要匹配类型进行对比,匹配成功在内存中组装返回值,匹配失败直接清空寄存器,返回默认值。...接下来我们看一下他如何进行类型断言

77110

Python教程如何设置函数默认参数

今天马哥教育要跟大家分享文章Python教程如何设置函数默认参数?上一讲我们结束了用文件保存游戏Python内容,这一讲我们来补充一个小技巧,关于设置函数默认参数哦!...Python入门新手和正在Python学习小伙伴快来看一看吧,希望能够对大家有所帮助 !...这样,在默认情况下,你只要调用 hello() 就可以输出 hello world 同样你也可以指定参数: hello('python') 输出 hello python 注意,当函数有多个参数时,如果你想给部分参数提供默认参数...比如: def func(a, b=5) 正确 def func(a=5, b) 就会出错 恭喜你在Python道路上又坚持了一天,快试着看看你代码里有没有能够设置替换,有的话不妨改一下,让Python...以上就是马哥教育今天为大家分享关于Python教程如何设置函数默认参数文章,希望本篇文章能够对正在 python学习 和从事python相关工作小伙伴们有所帮助,想要了解更多相关知识记得关注马哥教育官网

1.9K10

Redis中集合类型怎么实现

Redis里set结构还实现了基础集合并、交、差操作。与Redis对外暴露其它数据结构类似,set底层实现,随着元素类型是否整型以及添加元素数目多少,而有所变化。...讨论set如何在intset和dict基础上构建起来。 集中讨论set并、交、差算法实现以及时间复杂度。注意,其中差集计算在Redis中实现了两种算法。...intsetSearch对于二分查找算法一个实现,它大致分为三个部分: 特殊处理intset为空情况。...我们前面提到过,set底层实现,随着元素类型是否整型以及添加元素数目多少,而有所变化。...在执行完sadd s1 a b之后,由于添加元素不再数字,s1底层实现会转成一个dict。

1.1K20

Java 中到底应该用接口类型 还是实现类型去引用对象

如题,Java 中到底应该用接口类型 还是实现类型去引用对象?首先贴出答案: 应该优先使用接口而不是类来引用对象,但只有存在适当接口类型时 。...temp,去接收实现类B实例化出来对象地址(这里=传递地址)。...(当然A demo=new A();不可能,因为接口不能用来实例化对象,但可以用来声明一个接口类型引用变量)。...用接口类型引用变量demo,去接收实现类B实例化出来对象地址(这里=传递地址)。为什么不是B demo=new B(); 呢,这样也不会有问题啊?...(当然A demo=new A();不可能,因为接口不能用来实例化对象,但可以用来声明一个接口类型引用变量)。

1.6K30

MVCC如何实现

由于事务2修改,那么事务1两次读到数据可能不一样,因此称为不可重复读。...当我们将当前会话隔离级别设置为可重复读时候,当前会话可以重复读,就是每次读取结果集都相同,而不管其他事务有没有提交。 我当初做完这个实验时候,我都蒙蔽了,MySQL如何支持这两种隔离级别的?...我们接着往下看 MVCC如何实现? 为了判断版本链中哪个版本对当前事务可见,MySQL设计出了ReadView概念。...这些语句时,才会为事务分配唯一事务id,否则一个事务事务id值默认为0。...,mids=[100,200],min_trx_id=100,max_trx_id=201,creator_trx_id=0(select这个事务没有执行更改操作,事务id默认为0) 最新版本name

89630

万物皆对象Python属性如何定义??

你们老朋友Java学术趴。 11.2.4 属性 属性就是类里面定义变量。定义在类里面、方法外面的属性称为类属性。定义在方法里面使用 self引用属性称之为实例属性。...# 在这个函数中声明属性称为实例使用,这个函数中属性专门给类实例方法使用 # 这个函数不用我们手调用,在创建类对象时候他会自动调用,这个函数用于初始化数据 def...cat = Animal() # 在类实例对象中添加额外属性 cat.color = 'white' 复制代码 以上这种方式只能给指定对象添加指定属性,其他对象是无法访问 # 类全部组成...这个方法相当于Java构造方法 # 这个方法在类实例化对象时候自动调用 def __init__(self, name, age, type): self.name...) # 狼狗 ​ # 调用类中实例方法 dog.eat('骨头') # 小猫年龄:4,喜欢食物:骨头

2.2K10

Python小姿势 - # 如何Python实现基本数据类型

如何Python实现基本数据类型 Python一门面向对象编程语言,基本数据类型包括整数、浮点数、字符串、布尔值、列表、元组、字典等。...整数最基本数据类型,一个整数可以是任意大小,只要内存允许。 浮点数也称为实数,有小数点数字,浮点数可以是负,也可以是正。...字符串一串字符,字符串可以用单引号或双引号来表示,例如:'abc' 或 "abc" 。 布尔值逻辑值,只有两个值:True 和 False 。 列表一种有序集合,可以随时添加和删除元素。...元组一种不可变有序集合,一旦创建了元组就不能修改元组内容。 字典一种映射类型,字典里每个元素都是由一个键和一个值组成

91910

lodash 如何类型检测

Boolean Boolean 类型ECMAScript 中使用得最多一种类型,该类型只有两个字面值:true 和 false。...== null } 原来只是检测是否一个非 null 对象。 Symbol ES6 引入了一种新原始数据类型Symbol,表示独一无二值。Symbol 值通过Symbol函数生成。...与 undefined 不同,它是一个字面量,而 undefined 全局对象一个属性。 从逻辑角度来看,null 值表示一个空对象指针,null 表示缺少标识,指示变量未指向任何对象。...下面开始分析引用类型 Object 引用类型 引用类型值(对象引用类型一个实例。在ECMAScript 中,引用类型一种数据结构,用于将数据和功能组织在一起。...也就是说该对象由 Object 构造函数创建,或者 [[Prototype]] 为 null 。 那么如何检测普通对象呢function isPlainObject(value) { if (!

1.7K20

Python 内部如何实现整数相加不溢出

不过今天,我想接着昨天的话题,聊一聊 Python 如何实现整数相加而不溢出?...1、如何表示一个整数 要想了解这个,那就需要看 Python 源代码[1],Python整数底层对应结构体PyLongObject,它位于 longobject.h[2] 中。...当然这个数组具体多长则取决于你要存储 Python 整数有多大,因为 C 中数组长度不属于类型信息,你可以看成长度 n,而这个 n 是多少要取决于你整数大小。...最后的话 源码之下无秘密,看源码会比较辛苦,却可以学到精髓和本质,本文通过源码逐层展开,带你了解了下 Python 整数对象实现、整数内存大小计算,整数池,整数加减法源码,相信你已经知道了 Python...如何实现整数想加而不溢出

1K30
领券