- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 python 对象中,覆盖方法 __repr__
和 __str__
一个对象的定义允许人们分别提供该对象的“明确的”和“人类可读的”表示。如何在 Racket 中实现类似的行为?
我遇到了 printable<%>
界面 here ,看起来它应该可用于此目的,但我无法让它像我期望的那样工作。基于文档中的标准“鱼”示例:
(define fish%
(class* object% (printable<%>)
(init size) ; initialization argument
(super-new) ; superclass initialization
;; Field
(define current-size size)
;; Public methods
(define/public (get-size)
current-size)
(define/public (grow amt)
(set! current-size (+ amt current-size)))
(define/public (eat other-fish)
(grow (send other-fish get-size)))
;; implement printable interface
(define/public (custom-print port quoting-depth)
(print "Print called!"))
(define/public (custom-write port)
(print "Write called!"))
(define/public (custom-display port)
(print "Display called!"))))
这是我得到的输出:
> (define f (new fish% [size 10]))
> f
"Display called!""Display called!""Print called!"
> (print f)
"Write called!""Print called!"
> (display f)
"Display called!""Display called!"
> (write f)
"Write called!""Write called!"
>
所以这个问题有三个方面:
为什么它会以这种方式运行,即在对象的明显单一渲染上调用多个方法?
custom-print、custom-write 和 custom-display 方法的计算结果应该是什么?他们应该简单地返回一个字符串,还是应该实际承担打印、写入或显示的副作用(视情况而定)?例如。自定义写入方法是否应调用 write
内部功能?
这是用于此目的的正确结构吗?如果没有,有没有/它是什么?
最佳答案
至于
- Why does it behave this way, i.e. with the multiple methods being invoked on an apparently singular rendering of the object?
你不小心在write
中使用了print
,所以写入值时,会先打印值。
(define/public (custom-write port)
(print "Write called!"))
display
中也存在类似的问题。
还要记住打印/写入/显示到正确的端口。
尝试
#lang racket
(define fish%
(class* object% (printable<%>)
(init size) ; initialization argument
(super-new) ; superclass initialization
;; Field
(define current-size size)
;; Public methods
(define/public (get-size)
current-size)
(define/public (grow amt)
(set! current-size (+ amt current-size)))
(define/public (eat other-fish)
(grow (send other-fish get-size)))
;; implement printable interface
(define/public (custom-print port quoting-depth)
(print (~a "Print " current-size "\n") port))
(define/public (custom-write port)
(write (~a "Write " current-size "\n") port))
(define/public (custom-display port)
(display (~a "Display " current-size "\n") port))))
在repl中你会看到:
> (define f (new fish% [size 10]))
> f
"Print 10\n"
> (display f)
Display 10
> (write f)
"Write 10\n"
关于oop - python 的 __repr__ 和 __str__ 的 Racket 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975708/
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,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
我是一名优秀的程序员,十分优秀!