【问题标题】:Why str has no __radd__ method in Python?为什么 str 在 Python 中没有 __radd__ 方法?
【发布时间】:2010-02-06 14:02:40
【问题描述】:

str 有其他方法,如 __rmod__、__rsub__ 或 __rmul__

int 确实有一个 __radd__ 方法

很奇怪,我想知道原因。

第一个术语有添加方法时调用的示例 radd beeing:

>>> class STR(str):
...     def __radd__(self, other):
...             print "jeje"
...             return other.__add__(self)
... 
>>> 'aaaaa' + STR('bbbbb')
jeje
'aaaaabbbbb'

【问题讨论】:

    标签: python implementation


    【解决方案1】:

    __radd__ 在加法的第一项没有实现__add__ 时使用。在int 的情况下,加法由其数学定义很好地定义,因此 int 试图将其他项强制转换为数字。

    str 没有这么明确的含义,python 的开发者已经决定没有明显的需要有一些东西+“字符串”。

    【讨论】:

    • 你确定吗?在添加到问题的示例中,使用了 __radd__ 并且第一个术语确实有 __add__。
    • 在str + STR的特定情况下,STR是str的子类,因为它提供了更具体的方法,所以优先使用它而不是str.__add__
    • 你能再解释一下吗?
    【解决方案2】:

    类型只定义它们使用的方法。由于唯一可以添加到字符串的对象是其他字符串或 unicode 对象,因此不需要通用的__radd__ 方法。 __rmul__ 允许你复制字符串:

    >>> 4 * 'abc'
    'abcabcabcabc'
    

    我不确定为什么需要__rmod__,但它在某种程度上与格式有关。也许它简化了使用单个参数进行格式化的实现,如"Hello %s" % 'world'。我不知道。与您的断言相反, str 对象上没有 __rsub__

    简而言之,这些方法只有在它们实际做某事时才会被定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 2012-01-04
      • 2015-02-16
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多