2013-08-28 38 views
1

有沒有辦法爲Model創建另一個類?將字符串轉換爲另一個Python類

例如,我有model.py,其中的類的一個內部包含:

class Customers(ndb.Model): 
    lastname = ndb.StringProperty() 
    firstname = ndb.StringProperty() 
    license = ndb.StringProperty() 
    birthdate = ndb.DateProperty() 
    remarks = ndb.TextProperty() 

我知道我可以使用dir(model)模型得到的,它輸出類似:

['Customers', 'CustomerAddresses','Whatever','__builtins__', '__doc__', '__file__', '__name__', '__package__', 'ndb'] 

但是,有沒有什麼辦法可以讓我用dir(model)這些字符串自動生成另一個類,如:

class RestCustomers(webapp2.RequestHandler): 
    #some code that gets the model class attributes and displays the json string 
    customers = # customer attributes from model 
    self.response.headers['Content-Type'] = "application/json" 
    self.response.write(json.dumps(customers)) 

我不知道這是否是可能的,但有點像JavaScript的工作,其中,你這樣說

var models = dir(models); // which is an array 
var class = "Rest"+models[0]; 

或類似的東西...

回答

2

嘗試是這樣的:

from google.appengine.ext.ndb import metadata 
class RestCustomers(webapp2.RequestHandler): 
    customers = metadata.get_properties_of_kind(Customers) 
    self.response.headers['Content-Type'] = "application/json" 
    self.response.write(json.dumps(customers)) 

欲瞭解更多信息,請參閱documentation about metadata。我不完全確定如何get_properties_of_kind期望得到kind參數,所以試試看。

0

可以使用方式:

self.__setattr__(variable_name, value) 

...嘗試這樣的事情。雖然我不確定你想要什麼。我不認爲你知道你想要什麼;)通常,如果你必須像這樣破解一些東西,你的想法/設計是不正確的。

class NewClass: 
    def __init__(self, inherits): 
     for k, v in inherits.__dict__.items(): 
      self.__setattr__(k, v)