- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
__repr__
函数似乎有不同的返回方式。
我有一个 InfoObj 类,它存储了很多东西,其中一些我并不特别希望类的用户自己设置。我认识到 python 中没有任何内容是 protected ,他们可以直接潜入并设置它,但似乎在 __init__
中定义它使得更有可能有人看到它并假设将它传递进去就可以了。
(示例:验证函数在确定对象已完全填充时设置的 bool 值,以及在存储足够信息时从其他值计算的值...例如 A = B + C ,所以一旦设置了 A 和 B,就会计算 C,并且对象被标记为 Valid=True。)
那么,考虑到所有这些,哪种方法是设计 __ repr__ 输出的最佳方式?
bob = InfoObj(Name="Bob")
# Populate bob.
# Output type A:
bob.__repr__()
'<InfoObj object at 0x1b91ca42>'
# Output type B:
bob.__repr__()
'InfoObj(Name="Bob",Pants=True,A=7,B=5,C=2,Valid=True)'
# Output type C:
bob.__repr__()
'InfoObj.NewInfoObj(Name="Bob",Pants=True,A=7,B=5,C=2,Valid=True)'
... C 类型的要点是不愉快地将我在 C++ 中设置为“私有(private)”的所有东西作为构造函数的参数,并让使用该类的队友使用接口(interface)函数设置它,即使这对他们来说是更多的工作。在那种情况下,为了 __repr__
如果有任何不同,我计划使用它们的 __repr__
输出将这些 python 对象存储在数据库中,并使用 eval()
检索它们,至少除非我想出一个更好的办法。队友手动创建完整对象而不是通过适当的接口(interface)函数的结果只是一种类型的信息检索可能不稳定,直到有人弄清楚他做了什么。
最佳答案
__repr__
方法旨在为开发人员而非最终用户生成最有用的输出,因此只有您才能真正回答这个问题。但是,我通常会选择选项 B。选项 A 不是很有用,选项 C 不必要地冗长——您无论如何都不知道您的模块是如何导入的。其他人可能更喜欢选项 C。
但是,如果要将 Python 对象存储为数据库,请使用 pickle
。
import pickle
bob = InfoObj(Name="Bob")
> pickle.dumps(bob)
b'...some bytestring representation of Bob...'
> pickle.loads(pickle.dumps(bob))
Bob(...)
如果您使用的是较旧的 Python(3.x 之前的版本),请注意 cPickle
速度更快,但 pickle
的可扩展性更强。 Pickle 无需任何配置即可在您的某些类上工作,但对于更复杂的对象,您可能需要编写自定义 pickler。
关于python - 对于自定义 Python 类,哪个 __repr__ 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352484/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如何创建特殊方法 __repr__我可以打印的地方,例如 '6 of spades'或 'Q of diamonds' ? 我如何从 namedtuple 访问数据,请记住我有一个 list的 nam
是否可以使下面代码中的__repr__返回数据帧? 下面的代码将抛出 TypeError: __str__ returned non-string (type DataFrame) 因为 - 我猜 -
我正在研究 Python 元编程。 class FormMetaClass(type): def __new__(cls, clsname, bases, methods):
背景 我编写了一个修饰函数来修改给定类的 __repr__,这样当调用一个类实例时,它的所有属性都会打印给用户。当在下面示例中的 Container 类中使用时,装饰器 __repr__dec 的行为
我想自己写__repr__对于我定义的某些类。我希望它类似于默认的 ,除了那里有一些其他细节。我如何重现 东西? 最佳答案 参见 http://docs.python.org/reference/d
所以我有一个类方法,我想用它来绘制字典及其值: def __repr__ (self): for row in zip(*([ky]+map(str,val) for ky,val
处理持久化对象的 __repr__() 函数的最佳方法是什么?例如,表示数据库中的一行(关系或对象)。 根据 Python 文档,__repr__() 应该返回一个字符串,该字符串将使用 eval()
我正在开发一个主要返回闭包而不是传统的基于类的方法的 Python 项目。例如: def term(token): def fn(text): return (...)
这两种方法有区别吗? 例如, from datetime import date today = date(2012, 10, 13) repr(today) 'datetime.date(2012,
用成员变量x和y为类Foo实现__repr__,有没有办法自动填充字符串?无效的示例: class Foo(object): def __init__(self, x, y):
我有一个表示接口(interface)的抽象基类。此类的子类将此类的其他子类存储为属性。 例如: class AbstractBase(object): pass class Child(Ab
这个问题在这里已经有了答案: Purpose of __repr__ method? (6 个答案) 关闭 4 年前。 我正在尝试自己学习 python,但我坚持使用 __repr__ 函数。尽管我
我有以下(示例)代码: class _1DCoord(): def __init__(self, i): self.i = i def pixels(self):
print OBJECT 调用OBJECT.__str__(),那么什么时候调用OBJECT.__repr__()?我看到当 OBJECT.__str__() 不存在时 print OBJECT 调用
最近,__repr__() 遇到了很多麻烦。 , format() , 和编码。 应该输出__repr__()是编码还是 unicode 字符串? __repr__() 的结果是否存在最佳编码?在 P
def __repr__(self): return '' % ( self.__class__.__name__, self.urlconf_name, self.app_name,
( python 3.5.2) 我已经为我的一个类定义了 __repr__ 如下: class d(): def __init__(self): self._values =
我已经创建了我的 Node 和 Stack 类,但我不知道如何在 Stack 类中显示 repr 以便能够打印堆栈中当前的所有项目?我一直在尝试连接节点,但我不确定如何连接,因为 Stack() 不允
我通常写一个__repr__作为展示如何首先重新创建实例的一种方式。例如: class Component: def __init__(self, start, end): s
我是一名优秀的程序员,十分优秀!