2017-02-03 6 views
1

У меня есть следующий код, где-то класс не чтит себя. name., когда я обращаюсь к переменной класса в функции, он жалуется, что self.variable не является глобальной переменной. Любые идеи почему?NameError: global name Ошибка в классе, но на самом деле определена

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, 
     } 

Когда доступ к классу, design_name есть, но как-то питон жалуется, что не объявлена ​​как глобальная? Есть идеи?

скажем температура объявлена ​​с классом Designs, и заполняется значением для design_name

print temp.design_name 
    print temp.serialize() 

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

команда сериализации не работает ** и выдает следующую ошибку:

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

Конечно, я буду иметь догадку. Код, который вы используете, не является кодом, который вы опубликовали. В вашем фактическом коде у вас нет кавычек вокруг 'design_name' в словаре. – kindall

+1

Ваш код не может произвести эту ошибку. Убедитесь, что вы сохранили файл, а затем повторно запустите. – shx2

+0

назовите его так: 'i.serialize' без parenthese – Cicero

ответ

1

Вы определяете Serialize как собственность, поэтому вы должны относиться к ней как к собственности.

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) 

так уронить скобку от вызова .serialize

выход:
Здравствуйте
{ 'design_name': 'Привет'}

+0

Большое вам спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^