2
我已经写了类装饰器猴片的一类覆盖INIT和添加的方法仍然存在()。到目前为止一切正常。类装饰用类方法
现在我需要一个类方法(静态方法)添加到装饰类。我有什么在我的代码更改为使STATICMETHOD()装饰类的静态方法?
这是我的代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
class Persistent (object):
def __init__ (self, table = None, rmap = None):
self.table = table
self.rmap = rmap
def __call__ (self, cls):
cls.table = self.table
cls.rmap = self.rmap
oinit = cls.__init__
def finit (self, *args, **kwargs):
print "wrapped ctor"
oinit (self, *args, **kwargs)
def persist (self):
print "insert into %s" % self.table
pairs = []
for k, v in self.rmap.items(): pairs.append ((v, getattr (self, k)))
print "(%s)" % ", ".join (zip (*pairs) [0])
print "values (%s)" % ", ".join (zip (*pairs) [1])
def staticMethod(): print "I am static"
cls.staticMethod = staticMethod
cls.__init__ = finit
cls.persist = persist
return cls
@Persistent (table = "tblPerson", rmap = {"name": "colname", "age": "colage"})
class Test (object):
def __init__ (self, name, age):
self.name = name
self.age = age
a = Test ('John Doe', '23')
a.persist()
Test.staticMethod()
,输出是:
wrapped ctor
insert into tblPerson
(colage, colname)
values (23, John Doe)
Traceback (most recent call last):
File "./w2.py", line 39, in <module>
Test.staticMethod()
TypeError: unbound method staticMethod() must be called with Test instance as first argument (got nothing instead)
谢谢。有时它很简单。 – Hyperboreus 2011-06-01 02:50:00
有时Python有奇怪的语法。 – GWW 2011-06-01 02:50:51