我用__init__()
构造函数创建了两个简单的类,然后在列表中创建了它们的实例。
我很好奇,是否只是在列表中创建对象实际上会创建该类的实例,还是仅当我们稍后引用该对象(通过提及索引值)时才知道该类实例是创建了吗?
#First Class
class myClassOne(object):
def __init__(self, a):
self.a = a
def __str__(self):
return self.a
#Second class
class myClassTwo(object):
def __init__(self, a):
self.a = a
def __str__(self):
return self.a
#Instance of classes being called as an object inside the list
a = [1,2,3,myClassOne("hello"),myClassTwo("world"),"blah","blah"]
print(id(a[3]),id(a[4]))
print(a[3],a[4])
输出:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
140362290864536 140362290864592
hello world
答案 0 :(得分:2)
您可以通过添加一些print
语句来轻松测试:
class myClassOne:
def __init__(self, a):
self.a = a
print("myClassOne instance created.")
def __str__(self):
return self.a
class myClassTwo:
def __init__(self, a):
self.a = a
print("myClassTwo instance created.")
def __str__(self):
return self.a
print("Creating list 'a' ...")
a = [1, 2, 3, myClassOne("hello"), myClassTwo("world"), "blah", "blah"]
print("... list 'a' created.")
print("Printing ids ...")
print(id(a[3]), id(a[4]))
print("... ids printed.")
print("Printing items ...")
print(a[3], a[4])
print("... items printed.")
这是结果:
$ python3 hello.py
Creating list 'a' ...
myClassOne instance created.
myClassTwo instance created.
... list 'a' created.
Printing ids ...
139953120034712 139953120034656
... ids printed.
Printing items ...
hello world
... items printed.
如您所见,实例是在创建列表a
时创建的。
总是这样:当您告诉Python做某事时,它会立即执行该操作,而不管该指令是列表构造还是类似对象的一部分。
请注意,告诉Python 要做做某事(例如在创建该列表的情况下)和告诉它如何做某事(就像您要定义myclassOne.__init__()
一样。
当您使用def ...
块定义函数或方法时,您是在告诉Python 如何做某事,直到调用该函数或方法。
构建列表时,您是在告诉Python 做某事,因此它会继续进行。