- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建这个函数
>>> str(Link('Hello'))
'Hello'
>>> str(Link(1, Link(2)))
'1 -> 2'
>>> print(Link(1 / 2, Link(1 // 2)))
0.5 -> 0
>>> str(Link(Link(1, Link(2, Link(3))), Link(4, Link(5))))
'(1 -> 2 -> 3) -> 4 -> 5'
>>> print(Link(Link(Link(Link('Wow')))))
(((Wow)))
>>> print(Link(Link('a'), Link(Link('b'), Link(Link('c')))))
(a) -> (b) -> (c)
这是我的代码:
def __str__(self):
result = ''
while self.rest is not Link.empty:
result += '{0} -> '.format(self.first)
self = self.rest
return result + '{0}'.format(self.first)
但是,我不知道该怎么做才能完成最后三个文档测试。救命!!!
class Link(object):
empty = ()
def __init__(self, first, rest=empty):
self.first = first
self.rest = rest
最佳答案
看起来规则应该是,如果列表的头部本身就是一个列表,则格式化该列表,并将其放在括号中。像这样的事情:
first = '({0})'.format(self.first) if isinstance(self.first, Link) else first
result += '{0} -> '.format(first)
现在,避免在 rest
上使用递归有点奇怪。 ,但随后间接在 first
上使用递归。 (这就是 '{0}'.format(…)
的作用 - 如果您还没有定义 __format__
方法,它会调用您的 __str__
方法。)
因此,假设这是一个赋值,如果该赋值告诉您不要使用递归,您将需要将其转换为循环。另一方面,如果赋值没有说避免递归,那么对两者都进行递归会简单得多:
first = str(self.first)
if isinstance(self.first, Link):
first = '({0})'.format(first)
if self.rest is Link.empty:
return first
return '{0} -> {1}'.format(first, self.rest)
<小时/>
作为旁注:这是一个库存方案练习,移植到 Python 很糟糕(这意味着你的老师要么不了解或不喜欢 Python,这不是一个好兆头……),但它缺少一个一 block 。
通常,您应该处理,例如 Link(1, 2)
与 Link(1, Link(2))
不同。 (用 Lisp 术语来说,就是 (1 . 2)
与 (1 2)
。)但是您给出的示例都没有对此进行测试,因此不清楚您应该为前者输出什么。 Sp…准备好因为没有读懂老师的想法而被扣分,除非你想做这样的事情:
first = str(self.first)
if isinstance(self.first, Link):
first = '({0})'.format(first)
if self.rest is Link.empty:
return first
rest = str(self.rest)
if isinstance(self.rest, Link):
return '{0} -> {1}'.format(first, self.rest)
else:
# surely (1 2 . 3) is not the same list as (1 2 3) but the spec left it out?
return '{0} .. {1}'.format(first, self.rest)
关于python - 链表类 __str__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594501/
在 Python 3 中有没有一种方法可以以编程方式递归调用私有(private)成员变量唯一的 __str__ 函数?像这样的东西: class A: def __str__(self):
我正在用 Python 构建一个简单的类。我已经定义了我自己的 __str__ 方法,当我在类的一个实例上调用 print 时,它应该能很好地工作。当我创建该类的实例并对其调用 print 时,出现错
我一直在尝试创建一个理性类,并添加一个 __str__ dunder 方法返回 p(分子)除以 q(分母)。当我尝试打印对象 Rational_1 时,它只提供 init 方法的输出,并且不返回 __
当我尝试 __str__() 国外的方法它提供这个错误 __str__ returned non-string (type Product) 模型.py class Product(models.Mo
使用这样的嵌套模型: class Gov(models.Model): name = models.CharField(max_length=20) def __str__(self)
在 django __str__ 中有没有办法一次输出所有属性,而不是像我在这里做的那样一个一个输出?我计划拥有大约 100 个属性,因此将所有属性都放在 str 方法中似乎不正确。 class Ca
可以 __str__从字面上返回任何我的灵魂想要的东西? __str__ 上的文档状态: [...] the “informal” or nicely printable string represe
我在容器中打印用户定义的类实例时遇到了一些问题。简而言之,如果我的代码是: class A(): def __str__(self): return 'abc' class B
我是 Python 新手,但我一直遇到与此类似的问题 thread 我当前正在运行: Python 3.6.7 海湾合作委员会8.2.0 没有 IDE,只有普通的 *.py 文件 这是我的类(clas
您好,当我尝试打印我的对象时,我遇到了 __str__ 问题。解释器告诉我“TypeError:格式字符串的参数不足” 这是我正在尝试运行的代码! 'My Practice Class'
我正在尝试改进您在 codecademy python 类(class)中制作的“战舰”游戏,我决定我的第一步是实现类。 我预期的代码输出是五行 O O O O O。当我在 for 循环中只使用一个
这个问题在这里已经有了答案: functools.partial on class method (2 个答案) 关闭 5 年前。 我在尝试为一个程序编写 pretty-print 程序时遇到了这个
这是我的脚本: import math class Vector: def __init__(self, x=0.0, y=0.0): self.x = x s
我正在开发一个绘制线并找到中点的模块。出于测试目的,我想从相关类创建一些字符串输出。 class Line: def __init__(self, endpoints): self.sta
假设我有一个导入的模块,它工作正常但没有提供好的 __str__ 方法,我想添加一个。 在一些混合语言中: from foo import Foo Foo.prototype._str__ = fun
我了解到 __str__可以定义对象字符串的输出。 例子: class Person(object): def __init__(self, name): self.name
这个问题在这里已经有了答案: Why can't I replace the __str__ method of a Python object with another function? (2
在引发异常后,我试图覆盖 Python 中 Exception 子类的打印输出,但我没有运气让我的覆盖实际被调用。 def str_override(self): """ Overri
我想将 python 函数的字符串表示更改为函数名称。 例如某些功能 def blah(x): ... str(blah) 当前给出 所以我这样替换 __str__: blah.__str__=l
谁能告诉我 print sth 和 print str(sth) 之间的区别? 例如在 official documentation for sqlite3 的示例中,目前可以看到以下创建数据库的代码
我是一名优秀的程序员,十分优秀!