我一直在阅读有关使用python进行OOP的文章,特别是这篇文章。
该文章的作者有一个描述,然后是一个代码示例:
实例化类的Python语法与函数调用相同
>>> b = int()
>>> type(b)
<type 'int'>
通过这种方式,我推断“实例”存在于执行时而不是之前。当您执行时type(b)
,这就是类int()的实例。
但是后来我读到了这个堆栈溢出的答案:
实例是保存对象的内存地址的变量。
这使我对该术语有些困惑。因此,当我在执行时分配变量时,会创建“实例”吗?
最后,ComputerHope中的这种解释指出了一个事实,即实例与变量赋值相同:
function Animal(numlegs, mysound) {
this.legs = numlegs;
this.sound = mysound;
}
var lion = new Animal(4, "roar");
var cat = new Animal(4, "meow");
var dog = new Animal(4, "bark");
“动物”对象允许通过对象的每个实例设置动物的腿部数量和声音。在这种情况下,所有三个实例(狮子,猫和狗)的腿数相同,但声音不同。
谁能实际提供实例退出的清晰定义?
我一直在阅读有关使用python进行OOP的文章,特别是这篇文章。
该文章的作者有一个描述,然后是一个代码示例:
实例化类的Python语法与函数调用相同
>>> b = int() >>> type(b) <type 'int'>
还请阅读前面的句子:
一旦有了一个类,就可以实例化它以获取该类型的具体对象(实例),即根据该类的结构构建的对象。
因此,类的实例是具有该类作为其类型的对象。
据此,我推断“实例”在执行时而不是在执行时存在。
是,对的。“实例”和“实例”是Python中的运行时概念。
当您执行时
type(b)
,这就是类int()的实例。
不完全的。
int实例在int()
被调用时开始存在。1此过程称为“实例化”,结果(此调用返回该结果,然后在此示例中分配给b
)为的“实例” int
。
但是后来我读到了这个堆栈溢出的答案:
实例是保存对象的内存地址的变量。
哦,那不是很正确。实例就是对象本身(如果需要,该内存地址的值)。多个变量可以绑定到同一对象(因此绑定到同一实例)。甚至还有一个操作员可以测试:is
>>> a = 5
>>> b = a
>>> a is b
True
这使我对该术语有些困惑。因此,当我在执行时分配变量时,会创建“实例”吗?
不,然后实例绑定到该变量。在Python中,将变量视为“值的名称”。因此,将对象绑定到变量意味着给该对象指定名称。如上所见,一个对象可以具有多个名称。
您可以在不将实例分配给任何变量的情况下使用实例,即无需命名实例(例如,将其传递给函数):
>>> print(int())
0
最后,ComputerHope中的这种解释指出了一个事实,即实例与变量赋值相同:
function Animal(numlegs, mysound) { this.legs = numlegs; this.sound = mysound; } var lion = new Animal(4, "roar"); var cat = new Animal(4, "meow"); var dog = new Animal(4, "bark");
“动物”对象允许通过对象的每个实例设置动物的腿部数量和声音。在这种情况下,所有三个实例(狮子,猫和狗)的腿数相同,但声音不同。
不幸的是,有关ComputerHope的解释可能会使大多数读者感到困惑,而不是帮助他们。首先,它把术语“类”和“对象”混为一谈。他们的意思不同。类是一种类型的对象的模板。一类对象的对象和模板的概念不同,就像Cookie切割器与Cookie的含义不同。
当然,[为了理解]在Python中,类是(特殊的,但不是太特殊的)对象(类型type
),在JavaScript中直到class
引入概念之前,习惯使用纯对象并没有特别的帮助。作为其他对象的模板。(后一种方法称为“基于原型的面向对象”或“基于原型的继承”。相比之下,大多数其他面向对象的语言(包括Python)都使用基于类的面向对象/基于类的继承。我不太确定带有class
关键字的现代ECMAScript属于哪个类别。)
谁能真正提供实例的清晰定义?
就像我写的进一步上涨:一个实例一类是对象具有该类作为它的类型。
因此,一个“实例”始终是一个“实例的东西”。这也回答了标题中对语言问题的看法
我什么时候称它为“实例”?
当你想叫它“例如,你应该把它叫做“实例”的东西(通常是一个类)”。
1我还没有说完整的话。尝试这个:
>>> a = int()
>>> b = int()
>>> a is b
True
等等什么 的两个调用是否应该int
各自返回新实例,从而返回两个不同的实例?
大多数类型都会发生这种情况,但是其中一些内置类型是不同int
的。CPython实现的制造商意识到,经常使用小整数。因此,他们让CPython始终创建新的整数,只是每次需要相同的值时,它们都重新使用相同的整数(相同的对象/实例)。由于Python整数是不可变的,因此通常不会引起任何问题,并在计算密集型程序中节省大量内存和对象创建时间。
Python标准允许实现进行此优化,但AFAIK不需要它们。因此,应将其视为实现细节,并且程序逻辑永远不应依赖于此。(不过,您的性能优化可能会依赖它。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句