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)
初学者教程没有涉及许多步骤,因此我将尝试简短但彻底.我会尽量准确地使用我的术语,因此您可以查找所有不清楚的部分.
通常,Python中的方法是类对象中的函数.所有函数都是描述符.什么是一个部分描述符的意思是,当你通过访问一个方法实例的一类,它创建了一个封闭,可自动通过创建它的实例self
参数.例如,如果Cars
有一个方法 start(self)
除了__init__
,那么tesla.start
将是一个"绑定的方法",它是通过一个闭合tesla
作为self
到Cars.start
.请注意,之后我没有放括号tesla.start
.放括号实际上会调用绑定方法.
第二条信息:如果一个类定义了一个特殊的方法,那么它的实例就是可调用的.这意味着您可以像使用运算符的函数一样调用实例.当你这样做时,你可以看到这种情况.这是一个类对象,但您将其称为函数.我们现在接近实际传入的地方.__call__
()
tesla = Cars(...)
Cars
self
__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 次 |
最近记录: |