我对Python不是很熟悉,所以当我遇到这段代码时,有一些事情我不太清楚。代码如下:
class TypeVariable(object):
#A type variable standing for an arbitrary type.
#All type variables have a unique id, but names are only assigned lazily,
#when required.
next_variable_id = 0
def __init__(self):
self.id = TypeVariable.next_variable_id
TypeVariable.next_variable_id += 1
self.instance = None
self.__name = None
next_variable_name = 'a'
@property
def name(self):
#Names are allocated to TypeVariables lazily, so that only TypeVariables present
if self.__name is None:
self.__name = TypeVariable.next_variable_name
TypeVariable.next_variable_name = chr(ord(TypeVariable.next_variable_name) + 1)
return self.__name
为什么def __init__(self):
没有name
作为参数,但是在上面的代码中有self.__name = None
?你知道吗
还有,self.instance
是什么意思,因为我不记得有一个名为instance的属性。你知道吗
有人能帮我理解这段代码的功能吗?如果能提供java版本,我将不胜感激,因为我对java比较熟悉。谢谢
只有具有默认值的对象属性。如果构建类实例不需要它们,则不需要将它们放入
__init__()
参数中。你知道吗代码没有上下文来说明
self.instance
可能是什么。至于self.__name
,property
定义清楚地表明,它是在懒洋洋地为实例分配顺序名称。它将__name
设置为None
,这样就知道它尚未初始化;当self.name
被访问时,它将识别占位符,用新值替换它,并返回新值。你知道吗请注意,在Python中为
__init__
中的所有实例属性提供一些赋值被认为是良好的形式,因为否则很难确定实例可能具有哪些属性。在现代Python(3.3及更高版本)中,这样做可以节省内存;只要所有属性都在__init__
中初始化,并且在__init__
之后没有添加新的属性,那么所有实例的__dict__
都是key-sharing dictionary,这可以显著降低每个实例的成本(大约减少三分之二,尽管这是实现细节)。因此,如果其他方法/属性稍后会设置instance
,那么最好将其初始化为__init__
中的某个内容,以便维护人员知道它应该具有什么,并减少Py3.3+中的内存消耗。你知道吗相关问题 更多 >
编程相关推荐