- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
作为Python 2 documentation on __repr__
状态:
If at all possible, this (i.e.
__repr__
) should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment).
那么内置__repr__
怎么来的?对于类 不按照该准则行事?
>>> class A(object):
... pass
>>> repr(A)
"<class 'A'>"
为满足准则,默认__repr__
应该返回 "A"
,即通常 A.__name__
.为什么它的行为不同?我相信它会非常容易实现。
我可以在答案中看到讨论中不清楚什么是repr
应该返回。在我看来,repr
函数应返回一个允许您重现对象的字符串:
Ad.1. 看一下内置类案例(取自 this SO question ):
>>> from datetime import date
>>>
>>> repr(date.today()) # calls date.today().__repr__()
'datetime.date(2009, 1, 16)'
显然,假定的上下文就像您使用基本的导入形式一样,即 import datetime
,因为如果你想尝试 eval(repr(date.today()))
, datetime
不会被承认。 所以重点是 __repr__
不需要从头开始表示对象。如果它在社区同意的上下文中是明确的就足够了,例如使用直接模块的类型和函数。听起来很合理,对吧?
Ad.2.给出对象如何重建的印象对于 repr
是不够的, 我相信。帮助调试是str
的目的.
所以我对 repr
的期望是什么?允许我做 eval
在结果上。在类的情况下,我不想获得从头开始重建类的整个代码。相反,我希望对在我的范围内可见的类有一个明确的引用。 "Module.Class"
就足够了。没有冒犯,Python,但是 "<class 'Module.Class'>"
不只是削减它。
最佳答案
考虑一个稍微复杂一点的类:
class B(object):
def __init__(self):
self.foo=3
repr
需要返回类似的东西
type("B", (object,), { "__init__": lambda self: setattr(self, "foo", 3) })
已经注意到一个困难:并非所有由 def
语句定义的函数都可以转换为单个 lambda
表达式。稍微改变B
:
class B(object):
def __init__(self, x=2, y, **kwargs):
print "in B.__init__"
如何编写定义 B.__init__
的表达式?你不能使用
lambda self: print "in B.__init__"
因为 lambda
表达式不能包含语句。对于这个简单的类,已经不可能编写一个完整定义类的表达式。
关于类的 Python repr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15362183/
在交互式 Python 提示符上,当我没有将表达式 foo 的输出绑定(bind)到名称时,Python 将写入 builtins.repr(foo) 的输出> 到终端。 在较新版本的 Python
我目前正在编写一个 Vulkan 渲染器,我刚刚意识到我应该只接受 repr(C) 类型,但据我所知,没有办法在编译时实际检查它。 struct Vertex { x: f32, y:
是否有等效的 Pythons repr Scala 中的函数? 即一个函数,你可以给任何 scala 对象,它会产生一个有效的 scala 代码的对象的字符串表示。 例如: val l = List(
需要字符串在打印输出中显示 \n,且不带尾随 + 前导 '。目前在输入上使用repr(打开+读取.txt),所以我想知道删除'以进行正确索引/搜索的最佳方法是什么? repr('s')[1:-1] r
我想使用 repr() 获取 Python 编码的字符串文字(我可以将其粘贴到某些源代码中),但我更喜欢带有真正换行符的三引号字符串比 \n 转义序列。 我可以对字符串进行后处理,将 \n 转换回换行
我正在用 Python 处理一些文本解析,为此,对我要解析的每个字符串应用 repr() 函数对我来说很好,但在解析之后,我需要将一些已解析的子字符串转换回来到以前的表示,因为我想打印它们但我无法做到
所以我有一门类(class),我设置了类似的内容 class Piece: def __init__(): self.txt = "\u2665" # some met
作为Python 2 documentation on __repr__ 状态: If at all possible, this (i.e. __repr__) should look like a
我一直在阅读 repr在 Python 中。我想知道 repr 输出的应用程序是什么是。例如 class A: pass repr(A) ='' b=A() repr(b) = '' 什么时候会对
我正在使用一个小的 Python 脚本来生成一些将在 C 头文件中使用的二进制数据。 此数据应声明为 char[],如果可以将其编码为字符串(当它们不在 ASCII 可打印范围内时使用相关的转义序列)
在python中,repr和反引号`(1的左边)有区别吗? 用于演示: class A(object): def __repr__(self): return 'repr A'
我有一个节点类以十六进制和 HSV 形式保存 RGB 数据。我将使用它以各种方式对颜色进行排序,并且希望 HSV 元组保持浮点形式以进行比较,而不是每次使用都从字符串转换。有没有一种方法可以指定数据类
a = b'\x00\x01' ra = repr(a) # ra == "b'\\x00\\x01'" assert invert_repr(ra) == a invert_repr 的正确形式
我需要一个结构被视为 16 个无符号整数的数组,并且传递 CreditCard 类型将是透明的,因为我将传递一个 16 个无符号整数的数组。 如何使这段代码按照设计的方式工作? use std::fm
我有这个 C 代码: typedef void (*f_t)(int a); struct Foo { f_t f; }; extern void f(struct Foo *); b
我有一个结构: struct A { names: Vec, } 还有另一个结构: #[repr(C)] struct B { pub a: A, } 这是否使 A 也具有 repr(
除最后一部分外,我的代码运行完美。我想用 repr 函数重新创建对象,但它显然不起作用。我在这里和网上都试过了,但我还是很困惑。有什么方法可以做到吗?如果可以,语法是什么? class Modulo(
这个问题在这里已经有了答案: Convert "\x" escaped string into readable string in python (4 个答案) 关闭 7 个月前。 我有这个 st
我想要一种简单的方法来获取 repr() 之类的字典字符串按键排序。 my_print(dict(a=1, b=2, c=3)) -> "{'a': 1, 'b': 2, 'c': 3}" 我的解决方
我正在尝试在 Java 中完全模拟 Python 的 repr;这包括尽可能使用单引号。 Python 使用什么方法来确定它应该发出哪种引号? 编辑:我正在寻找一些实际代码,位于 Python 网络中
我是一名优秀的程序员,十分优秀!