为什么我的物体会消失?

时间:2012-06-26 16:11:31

标签: python class

我对我创建的对象有疑问,然后在函数中使用。

class environnement:
    def __init__(self, n, dic={}, listr=[], listf=[]):
        self.taille=n
        self.reg=dict(dic)
        self.raccess=listr
        self.faccess=listf

首先,我在我的函数compilProgram中创建一个环境,然后在这个环境中使用compilInstruction

def compilProgram(fichierSortie, nbrRegDispo, AST):
    DICOFUN={}
    for elt in AST.children:
        if elt.type=='fonctionDef':
            DICOFUN[elt.leaf]=elt.children
            continue
        else :
            pass
    env=environnement(nbrRegDispo)
    print(type(env))
    compteurLabel=0
    for elt in AST.children:
        if elt.type!='fonctionDef':
            (env, compteurLabel)=compilInstruction(env, fichierSortie, elt, compteurLabel)

compilProgram上的打印件是在env之前检查compilInstruction是什么(因为我有问题)。

def compilInstruction(env, fichierSortie, instruction,compteurLabel):
    print(type(env))
    envInterne=environnement(env.taille, env.reg, env.raccess, env.faccess)
    ...

我尝试了许多其他方式来复制env,但问题似乎并非来自它。 这是我在问题参数上尝试compilProgram时得到的结果:

<class 'Environnement.environnement'> (this is the print from compilProgram)
<class 'Environnement.environnement'> (this is the print from compilInstruction)
<class 'NoneType'> (this again comes from the print in compilInstruction)
...
AttributeError: 'NoneType' object has no attribute 'taille'

为什么compilInstruction中的打印运行两次,为什么env在两次运行之间消失?

2 个答案:

答案 0 :(得分:3)

您有两个打印报表,说明打印两次。

您在第一次调用env函数时返回compilInstruction。接下来,该函数返回None值作为它返回的元组的第一个元素。

答案 1 :(得分:1)

您不止一次致电compilInstruction

for elt in AST.children:
    if elt.type!='fonctionDef':
        (env, compteurLabel)=compilInstruction(env, fichierSortie, elt, compteurLabel)

你在AST.children中有多个elt不是'fonctionDef'(一个错字?),所以你不止一次调用compilInstruction。这就是为什么你从中获得多个印刷品的原因。 compilInstruction的返回值分配给envcompteurLabel,因此env将被无效覆盖。