为什么 class 可以调用另一个 class 的魔术方法?

why can a class call a magic method from another class?

class Example:
    def __init__(self):
        print("init called")

    def some_method(self):
        print("some method called")

当拥有函数的 class 的对象作为参数传递时,为什么 class 可以调用另一个 class 的构造函数。 例如,str调用Exampleclass的__init__方法。下面一行运行流畅

str.__init__(Example())

但是当我使用 str 调用非魔术方法时,在这种情况下 some_method,

str.some_method(Example())

显示如下错误

AttributeError: type object 'str' has no attribute 'some_method'

我明白 class 方法不应该这样使用,但我想知道这种行为的原因

str.__init__(Example()) 正在调用 str__init__ 方法。 Example__init__ 是 运行 的唯一原因是代码 Example() 运行它。因此,str.some_method(Example()) 失败,因为 str 没有名为 some_method 的方法。您并没有以某种方式对 Example 的实例进行 str 调用 some_method。这不是 Python 语法的工作原理。在这两种情况下,您都试图调用 str 本身的方法。不清楚您要做什么,但也许 str(Example().some_method()) 更像您想要的。