2017-02-03 1 views
1

J'ai le code suivant, où d'une manière ou d'une autre la classe n'honore pas le soi. name., lorsque j'accède à la variable de classe dans une fonction, il se plaint que self.variable n'est pas une variable globale. Des idées pourquoi?NameError: nom global Erreur dans la classe, mais est effectivement défini

from sqlalchemy import Column, ForeignKey, Integer , String, Float, DateTime 
from sqlalchemy.ext.declarative import declarative_base 

Base=declarative_base() 

class Designs(Base): 
    __tablename__='designs' 
    design_name=Column(String(80),nullable=False,primary_key=True) 

    @property 
    def serialize(self): 
     return{ 
     'design_name': self.design_name, 
     } 

Quand j'accéder à la classe, design_name est là, mais en quelque sorte python se plaint il n'est pas déclarée mondiale? Des idées?

disons température déclarée avec la classe Designs, et est rempli de valeur pour design_name

print temp.design_name 
    print temp.serialize() 

xpc_fp <----- print i.design_name works 

commande serialize ne fonctionne pas ** et donne l'erreur suivante:

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
    File "database_setup.py", line 149, in serialize 
    'design_name': self.design_name, 
NameError: global name 'design_name' is not defined 
+1

Bien sûr, je vais avoir une estimation. Le code que vous utilisez n'est pas le code que vous avez publié. Dans votre code actuel, vous n'avez pas les guillemets autour de 'design_name' dans le dictionnaire. – kindall

+1

Votre code ne peut pas produire cette erreur. Assurez-vous de sauvegarder le fichier, puis réexécutez. – shx2

+0

l'appellent comme ceci 'i.serialize' sans le parenthese – Cicero

Répondre

1

Vous définissez serialize comme une propriété - donc vous devriez le traiter comme une propriété.

from sqlalchemy import Column, ForeignKey, Integer , String, Float, DateTime 
from sqlalchemy.ext.declarative import declarative_base 

Base=declarative_base() 

class Designs(Base): 
    __tablename__='designs' 
    design_name=Column(String(80),nullable=False,primary_key=True) 

    @property 
    def serialize(self): 
    return{ 
     'design_name': self.design_name, 
    } 



temp = Designs(design_name='HELLO THERE') 
print(temp.design_name) 
print(temp.serialize) 

tomber de manière la parenthèse de la sortie appel .serialize

:
BONJOUR IL
{ 'design_name': 'BONJOUR LÀ'}

+0

Merci beaucoup! –