为什么 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
调用Example
class的__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())
更像您想要的。
class Example:
def __init__(self):
print("init called")
def some_method(self):
print("some method called")
当拥有函数的 class 的对象作为参数传递时,为什么 class 可以调用另一个 class 的构造函数。
例如,str
调用Example
class的__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())
更像您想要的。