gpt4 book ai didi

python - 在 Python 内部理解 self

转载 作者:太空狗 更新时间:2023-10-30 00:42:38 24 4
gpt4 key购买 nike

我完全理解在此示例中传递给 self什么。我对 如何 它在内部传递给 self 感到很困惑。谁能帮我理解一下?

class Cars:

def __init__(self, model, engine, doors):

self.model = model
self.engine = engine
self.doors = doors

tesla = Cars('Model S', 'Electric', 'Four door')
ford = Cars('Mustang', 'v8', 'Two door')

最佳答案

初学者教程没有涵盖许多步骤,因此我会尽量做到简短而透彻。我会尽量使用精确的术语,因此您可以查找所有您不清楚的部分。

一般来说,methods在 Python 中是 class object 中的函数.所有功能都是descriptors . descriptor 的一部分意思是当你通过 instance 访问一个方法时一个类,它创建一个 closure自动将您创建它的实例传递为 self范围。例如,如果 Cars 有一个 method start(self) 除了 __init__,然后 tesla.start 将是一个 "bound method" ,这是一个将 tesla 作为 self 传递给 Cars.start 的闭包。请注意,我没有在 tesla.start 之后加上括号。放置括号实际上会调用绑定(bind)方法。

第二条信息:如果一个类定义了一个__call__ special method , 它的实例被称为 callable .这意味着您可以使用 () 运算符调用一个实例,就好像它是一个函数一样。您可以在执行 tesla = Cars(...) 时看到这种情况。这里 Cars 是一个类对象,但您调用它时就好像它是一个函数一样。我们现在接近 self 实际传递给 __init__ 的地方了.

第三,差不多everything在 Python 中是一个 object并遵守您所知道的对象的一般规则,例如从类中创建等。这包括 functionsclasses .一个类对象是从另一个类创建的,该类被恰本地命名为 metaclass .通常 metaclasses是一 jar 你不想打开的蠕虫,所以我们只会在这里抓到足够的表面而不是更多。最常见的metaclasstype:99%1 作为初学者会遇到的所有类对象的实例 type . type 定义一个 __call__方法,这是您在执行 Cars(...) 时调用的方法,因为 Carstype 的一个实例。

type.__call__(Cars, ...) 做了几件事。首先它调用 Cars.__new__(Cars, ...)。这将返回您稍后最终分配给 teslaford 或其他任何东西的新实例。 Then ,如果__new__返回的是 Cars 的实例,它将调用 Cars.__init__(self, ...),其中 self 是它刚刚创建的新实例已创建。

这就是 self 传递给 __init__ 的方式。请记住,所有步骤都可以是 customized或覆盖,所以这实际上只是最简单情况的基本概述。


本文中的链接应该可以帮助您开始更具体的研究。所有链接都是完全不同的,即使它们是针对同一个术语的。所有链接都指向 Stack Exchange 站点(SO,但有一个异常(exception))或官方 Python 3 文档,只有一个异常(exception)。


1 这个统计数据是我编造的,但它可能是对的。

关于python - 在 Python 内部理解 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49442025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com