2017-02-03 13 views
1

我有以下代碼,其中某種程度上類不尊重自我。名字,當我訪問函數中的類變量時,它抱怨self.variable不是全局變量。任何想法爲什麼?NameError:全局名稱類中的錯誤,但實際上已定義

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在那裏,但不知何故python抱怨它沒有聲明爲全局?有任何想法嗎?

假設與設計類中聲明溫度,並且充滿價值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' – Cicero

回答

1

你定義連載作爲一種財產 - 所以你應該把它當作財產。

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

非常感謝你! –

相關問題