2014-10-02 13 views
0

我正在嘗試更改類以更符合我的規範。我通過繼承主類對包含類的類進行子類化

from flask.ext.sqlalchemy import SQLAlchemy 
class SpecialSQLAlchemy(SQLAlchemy): 
    def __repr__(self): 
    # I change this around a bit 

的SQLAlchemy的dir表明,它含有一個Model類,我想在一個特定的方式來修改啓動。但是,Model被綁定到SQLAlchemy的類。什麼是適當的方式

>>> from app import db 
>>> type(db) 
<class 'app/utilities/SpecialSQLAlchemy'> 
>>> dir(db)[dir(db).index('Model')] 
'Model' 

我想改變包含的SQLAlchemy類中的模型中__repr__。這將如何完成?

回答

0

這應當以簡單的方式工作:

from flask.ext.sqlalchemy import SQLAlchemy 
class SpecialSQLAlchemy(SQLAlchemy): 
    def __repr__(self): 
    # I change this around a bit 
    class Model(SQLAlchemy.Model): 
    def __repr__(self): 
     # changes here 
+0

這似乎並沒有工作,但可能是我自己的錯,因爲。我做了以下檢查它是否是這樣的類:'[x for x in l if inspect.isclass(getattr(db,x))]'and'Model'did did show up。 – corvid 2014-10-02 18:51:22

+0

如果Model類以特殊方式使用,例如在元類中的類創建期間綁定,它將不起作用。你也可以嘗試monkeypatch原始模型「repr」方法 - 只需在一行中分配一個新的函數,如'SQLAlchemy.Model .__ repr__ = my_repr_implementation' – jsbueno 2014-10-02 18:58:55

相關問題