Brython return 中的 super().__str__() 应该有所不同吗?
Should super().__str__() in Brython return something different?
我 运行 使用 Brython 并使用 str 方法继承了一个奇怪的情况。这是我使用 Brython console 进行的测试:
>>> class A(object):
... def __str__(self):
... return "A __str__ output."
...
>>> class B(A):
... def __str__(self):
... return super().__str__() + " (from B)"
...
>>> x = A()
>>> x
<__main__.A object>
>>> y = B()
>>> y
<__main__.B object>
>>> str(y)
"<super: <class 'B'>, <B object>> (from B)"
我期待最后一行 return:
"A __str__ output. (from B)"
我是不是做错了什么?
相同的代码在 CPython 中运行良好,所以它可能是 Brython 的一个错误。
Python 3.7.6 (default, Dec 30 2019, 19:38:26)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object):
... def __str__(self):
... return "A __str__ output."
...
>>> class B(A):
... def __str__(self):
... return super().__str__() + " (from B)"
...
>>> x = A()
>>> x
<__main__.A object at 0x1048de590>
>>> y = B()
>>> y
<__main__.B object at 0x1048de790>
>>> str(y)
'A __str__ output. (from B)'
>>>
这不一定是错误,也可能是特定于实现的行为。 super() 函数的行为在 Pyhton 中也发生了变化,因此您必须确保使用正确的形式,并针对兼容的实现进行测试。
你的情况是你正在打印 super()
返回的代理对象的字符串表示,而不是 调用 __str__
在实际父对象上.
更多信息请看这里:https://docs.python.org/3/library/functions.html#super
我 运行 使用 Brython 并使用 str 方法继承了一个奇怪的情况。这是我使用 Brython console 进行的测试:
>>> class A(object):
... def __str__(self):
... return "A __str__ output."
...
>>> class B(A):
... def __str__(self):
... return super().__str__() + " (from B)"
...
>>> x = A()
>>> x
<__main__.A object>
>>> y = B()
>>> y
<__main__.B object>
>>> str(y)
"<super: <class 'B'>, <B object>> (from B)"
我期待最后一行 return:
"A __str__ output. (from B)"
我是不是做错了什么?
相同的代码在 CPython 中运行良好,所以它可能是 Brython 的一个错误。
Python 3.7.6 (default, Dec 30 2019, 19:38:26)
[Clang 11.0.0 (clang-1100.0.33.16)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class A(object):
... def __str__(self):
... return "A __str__ output."
...
>>> class B(A):
... def __str__(self):
... return super().__str__() + " (from B)"
...
>>> x = A()
>>> x
<__main__.A object at 0x1048de590>
>>> y = B()
>>> y
<__main__.B object at 0x1048de790>
>>> str(y)
'A __str__ output. (from B)'
>>>
这不一定是错误,也可能是特定于实现的行为。 super() 函数的行为在 Pyhton 中也发生了变化,因此您必须确保使用正确的形式,并针对兼容的实现进行测试。
你的情况是你正在打印 super()
返回的代理对象的字符串表示,而不是 调用 __str__
在实际父对象上.
更多信息请看这里:https://docs.python.org/3/library/functions.html#super