小编pfp*_*ers的帖子

python内置str函数的意外行为

由于str.__call__我显然不理解的行为,我遇到了对str类进行子类型化的问题.

下面的简化代码可以很好地说明这一点.

class S(str):
    def __init__(self, s: str):
        assert isinstance(s, str)
        print(s)

class C:
    def __init__(self, s: str):
        self.s = S(s)

    def __str__(self):
        return self.s

c = C("a")  # -> prints "a"
c.__str__() # -> does not print "a"
str(c)      # -> asserts fails in debug mode, else prints "a" as well!?
Run Code Online (Sandbox Code Playgroud)

我一直认为str(obj)函数只是调用obj.__str__方法,就是这样.但由于某种原因,它也再次称之为__init__功能S.有人可以解释这种行为以及如何避免在使用该函数时S.__init__调用的结果吗?C.__str__str()

python

6
推荐指数
1
解决办法
91
查看次数

标签 统计

python ×1