由于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 ×1