python中的实例和未定义参数

2024-09-27 21:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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比较熟悉。谢谢


Tags: instance代码nameselfnoneidonlyinit
2条回答
self.instance = None
self.__name = None

只有具有默认值的对象属性。如果构建类实例不需要它们,则不需要将它们放入__init__()参数中。你知道吗

代码没有上下文来说明self.instance可能是什么。至于self.__nameproperty定义清楚地表明,它是在懒洋洋地为实例分配顺序名称。它将__name设置为None,这样就知道它尚未初始化;当self.name被访问时,它将识别占位符,用新值替换它,并返回新值。你知道吗

请注意,在Python中为__init__中的所有实例属性提供一些赋值被认为是良好的形式,因为否则很难确定实例可能具有哪些属性。在现代Python(3.3及更高版本)中,这样做可以节省内存;只要所有属性都在__init__中初始化,并且在__init__之后没有添加新的属性,那么所有实例的__dict__都是key-sharing dictionary,这可以显著降低每个实例的成本(大约减少三分之二,尽管这是实现细节)。因此,如果其他方法/属性稍后会设置instance,那么最好将其初始化为__init__中的某个内容,以便维护人员知道它应该具有什么,并减少Py3.3+中的内存消耗。你知道吗

相关问题 更多 >

    热门问题