私がこの前の投稿で述べたように。次のことを行うデコレータを作成しようとしています。
装飾されたクラスは、CouchDBやMongoDBなどのドキュメントベースのDB内のドキュメントを表します。デコレータは、そのようなデータベースへのコネクタのインスタンスである引数を受け入れます。モデルクラス(この例ではUser)は、未定義の属性をDB内のフィールドに自動的にマップします。
今、私は少し立ち往生しています:-/上記のものはすべて機能しています。しかし、今はモデルクラスからメソッドを呼び出すことができません。次のエラーが発生します。
TypeError:バインドされていないメソッドmyfunc()は、最初の引数としてUserインスタンスを使用して呼び出す必要があります(代わりに何も取得しません)
class Connector(object):
def readvar(self, var):
data = {"emailAddress":"jack.bauer@ctu.org", "lastName":"Bauer"}
return data[var]
class DocumentDB(object):
def __init__(self,connector):
self.connector = connector
def __call__(self, *args, **kargs):
_c = self.connector
class TransparentAttribute:
def __getattr__(self, attrname):
try:
return _c.readvar(attrname)
except:
return getattr(args[0], attrname)
return TransparentAttribute
c = Connector()
@DocumentDB(c)
class User(object):
username = "JackBauer"
def doSomething(self):
print "bla bla"
def doSomethingElse(self):
pass
def myfunc(self):
print "afadsadsf adsf asdf asdf"
u = User()
u.myfunc() # Does not work!!!
print u.emailAddress
print u.lastName
print u.username