在Python中内部理解自我

Ben*_*ton 5 python oop class self python-3.x

我完全理解在这个例子中传递的是什么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')
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 9

初学者教程没有涉及许多步骤,因此我将尝试简短但彻底.我会尽量准确地使用我的术语,因此您可以查找所有不清楚的部分.

通常,Python中的方法类对象中的函数.所有函数都是描述符.什么是一个部分描述符的意思是,当你通过访问一个方法实例的一类,它创建了一个封闭,可自动通过创建它的实例self参数.例如,如果Cars有一个方法 start(self)除了__init__,那么tesla.start将是一个"绑定的方法",它是通过一个闭合tesla作为selfCars.start.请注意,之后我没有放括号tesla.start.放括号实际上会调用绑定方法.

第二条信息:如果一个类定义了一个特殊的方法,那么它的实例就是可调用的.这意味着您可以像使用运算符的函数一样调用实例.当你这样做时,你可以看到这种情况.这是一个类对象,但您将其称为函数.我们现在接近实际传入的地方.__call__ ()tesla = Cars(...)Carsself__init__

第三,Python中的几乎所有内容都是一个对象,并遵循您对对象所知的一般规则,例如从类创建,等等.这包括函数.从另一个类创建一个类对象,该类被恰当地命名为元类.通常,元类是一种你不想打开的蠕虫,因此我们将在这里划出足够的表面,而不是更多.最常见的元类type:作为初学者遇到的所有类对象的99%1type.type定义一个__call__方法,这是你在调用时调用的方法,Cars(...)因为它Cars是一个实例type.

type.__call__(Cars, ...)做了几件事.首先它打电话Cars.__new__(Cars, ...).这将返回您稍后将分配给tesla或等的新实例ford.然后,如果__new__返回的东西是实例Cars,它将调用Cars.__init__(self, ...),self它刚刚创建的新实例在哪里.

这是如何self传递给__init__.请记住,所有步骤都可以自定义或覆盖,因此这只是对最简单情况的基本概述.


本文中的链接应该让您开始更具体的研究.所有链接都是完全不同的,即使它们是相同的术语.所有链接都是Stack Exchange站点(SO有一个例外),或官方Python 3文档,但有一个例外.


1我编制了这个统计数据,但无论如何它可能都是正确的.


归档时间:

查看次数:

113 次

最近记录:

7 年,5 月 前