如何将“Object”与字符串连接?

发布于 2025-01-06 11:00:40 字数 602 浏览 1 评论 0原文

如何在不重载和显式类型转换 (str()) 的情况下将 Object 与字符串(原始)连接?

class Foo:
    def __init__(self, text):
        self.text = text

    def __str__(self):
        return self.text


_string = Foo('text') + 'string'

输出:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
      _string = Foo('text') + 'string'

TypeError: unsupported operand type(s) for +: 'type' and 'str'

运算符+必须重载吗? 还有其他方法吗(只是想知道)?

PS:我知道重载运算符和类型转换(例如 str(Foo('text'))

How to concatenate Object with a string (primitive) without overloading and explicit type cast (str())?

class Foo:
    def __init__(self, text):
        self.text = text

    def __str__(self):
        return self.text


_string = Foo('text') + 'string'

Output:

Traceback (most recent call last):
  File "test.py", line 10, in <module>
      _string = Foo('text') + 'string'

TypeError: unsupported operand type(s) for +: 'type' and 'str'

operator + must be overloaded?
Is there other ways (just wondering)?

PS: I know about overloading operators and type casting (like str(Foo('text')))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

檐上三寸雪 2025-01-13 11:00:40

只需定义 __add__()__radd__() 方法:

class Foo:
    def __init__(self, text):
        self.text = text
    def __str__(self):
        return self.text
    def __add__(self, other):
        return str(self) + other
    def __radd__(self, other):
        return other + str(self)

它们将根据您是否执行 Foo("b") + "a"(调用__add__())或"a" + Foo("b")(调用__radd__())。

Just define the __add__() and __radd__() methods:

class Foo:
    def __init__(self, text):
        self.text = text
    def __str__(self):
        return self.text
    def __add__(self, other):
        return str(self) + other
    def __radd__(self, other):
        return other + str(self)

They will be called depending on whether you do Foo("b") + "a" (calls __add__()) or "a" + Foo("b") (calls __radd__()).

踏雪无痕 2025-01-13 11:00:40
_string = Foo('text') + 'string'

这行代码的问题在于,Python 认为您想要将 string 添加到 Foo 类型的对象,而不是相反。

如果你写:

_string = "%s%s" % (Foo('text'), 'string')

EDIT

你可以尝试一下,

_string = 'string' + Foo('text')

在这种情况下,你的 Foo 对象应该自动转换为字符串。

_string = Foo('text') + 'string'

The problem with this line is that Python thinks you want to add a string to an object of type Foo, not the other way around.

It would work though if you'd write:

_string = "%s%s" % (Foo('text'), 'string')

EDIT

You could try it with

_string = 'string' + Foo('text')

In this case your Foo object should be automatically casted to a string.

没有你我更好 2025-01-13 11:00:40

如果这对您的 Foo 对象有意义,您可以重载 __add__ 方法,如下所示:

class Foo:
    def __init__(self, text):
        self.text = text

    def __str__(self):
        return self.text

    def __add__(self, other):
        return str(self) + other

_string = Foo('text') + 'string'
print _string

示例输出:

textstring

If that makes sense for your Foo object, you can overload the __add__ method as follows:

class Foo:
    def __init__(self, text):
        self.text = text

    def __str__(self):
        return self.text

    def __add__(self, other):
        return str(self) + other

_string = Foo('text') + 'string'
print _string

Example output:

textstring
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文